首先先来扯一下,这篇博文是我第一次写的,主要是我的一些摘录,希望对大家有所帮助。
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;
排序,分组
orderby person.Age descending
1 int[] values = { 1, 2, 5, 2, 3, 5, 5, 3, 4, 3, 3 }; 2 var result = from i in values 3 //按i进行排序,g表示分组 4 group i by i into g 5 select g.Key;
扩展方法
下面的方法都是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则是只将序列中挑出指定类型的元素转换到范型序列中。