首页 > 代码库 > C# LiNq的语法以及常用的扩展方法

C# LiNq的语法以及常用的扩展方法

  首先先来扯一下,这篇博文是我第一次写的,主要是我的一些摘录,希望对大家有所帮助。

Linq的基础

LINQ(读音link):Linq To SQL(过时)、Linq To Object、Linq To XML、Linq To entity,目的:以统一的方式对数据进行操作。看起来非常像SQL语句,但是和SQL无关。
var关键字,var类型用来简化类型的声明,var i = 2,并不说明i是无类型的,编译器会自动根据右边的值推断(这叫类型推断)var代表的值。var只能用来语句中,不能用在返回值、参数列表等场合。
匿名类型,var s = new { Name = "jim", Sex = M },在后面的代码中就能用s.Name 这样的方式引用属性了。匿名类型不是动态类型,最终仍然是编译成一个类,用Reflector查看。如果编译器遇到了一个属性完全一致的匿名类型,则会重用这个类型,而不是每次都创建一个新的类型。也是类型推断的一种表现。
• string name = "ljw"; int age = 30;var p = new { name,age, name.Length};默认命名属性。
•如果推断的属性名冲突,则必须显式指定var p = new { name.Length ,Length2="C#".Length}
•如果写程序的时候调用不了Linq的方法,就看看是否using了system.Linq。
技术分享
1  Table1TableAdapter adapter = new Table1TableAdapter();2             /*3             强类型DataSet与Var.Database1DataSet.Table1DataTable dt = adapter.GetData();4             强类型DataSet与Var.Database1DataSet.Table1Row row = dt[0];5              */6             var dt = adapter.GetData();7             var row = dt[0];8             var aa = row.aa;
View Code

排序,分组
orderby person.Age descending

技术分享
1 int[] values = { 1, 2, 5, 2, 3, 5, 5, 3, 4, 3, 3 };2             var result = from i in values3                             //按i进行排序,g表示分组4                          group i by i into g5                          select g.Key;
View Code

扩展方法

下面的方法都是IEnumerable<T>的扩展方法:

Average计算平均值; Min最小元素;Max最大元素;Sum元素总和; Count元素数量;

Concat连接两个序列;//相当于sql的Unoin all

Contains序列是否包含指定元素;

Distinct取得序列中的非重复元素;

Except获得两个序列的差集;

Intersect获得两个序列的交集;

First取得序列第一个元素;

Single取得序列的唯一一个元素,如果元素个数不是1个,则报错;

FirstOrDefault 取得序列第一个元素,如果没有一个元素,则返回默认值;

Linq只能用于范型的序列,IEnumerable<T>,对于非范型,可以用Cast或者OfType

IEnumerable的方法:

Cast<TResult>:由于Linq要针对范型类型操作,对于老版本.Net类等非范型的IEnumerable序列可以用Cast方法转换为范型的序列。ArrayList l; IEnumerable<int> il = l.Cast<int>();

OfType<TResult>:Cast会尝试将序列中所有元素都转换为TResult类型,如果待转换的非范型序列中含有其他类型,则会报错。OfType则是只将序列中挑出指定类型的元素转换到范型序列中。

 

 

 

 

C# LiNq的语法以及常用的扩展方法