linq是c#3.0语言中鑫增加的一个扩展呢,linq可以处理非常大的对象集合。linq除了提供一种简洁的查询语言,指定要搜索的对象以外,linq还提供了许多扩展方法,更便于排序,组合和计算查询结果的统计数据。
1.linq的变体(linq to objects、linq to sql、linq to xml)
linq to objects:为任意的c#内存对象提供查询,例如:数组、列表和其他集合类型。
2.第一个linq查询
eg: string[] names = {"alonso","zheng","smith","jones","smythe","mary"};
查询: var results=from n in names where n.StartsWith("m") select n;
排序查询结果: var results=from n in names where n.StartsWith("m") orderby n select n;
按姓名中的最后一个字母排序:var results=from n in names where n.StartsWith("m") orderby n.Substring(n.Length-1) select n;
使用方法语法排序:var results=names.OrderBy(n => n).Where(n => n.StartsWith("s"));
注:大多数使用方法语法的linq方法都要求传送一个方法或函数,来计算查询表达式。方法/函数参数以委托的形式传送,他一般引用一个匿名方法。
n=>n<1000 运算符=>是~运算符 意思是:如果n小于1000该函数就返回一个true,否则返回false,函数是没有名称的匿名函数。
查询复杂对象:var results=from n in names where n.Region=="Asia" select n; region是数据源的属性
var results=from n in names where n.Region=="Asia" select n.City; region是数据源的属性 只显示符合条件的city那个列。注意:不可以显示多个 。
单值选择查询:var results=from n in names where n.Region=="Asia" select n.distinct();
any、all、多级排序(ThenBy)
(1)用var关键字申明结果变量 (2)指定数据源:from子句 (3)指定条件:where子句 (4)指定元素:select子句 (5)排序:orderby(descending降序)
3.方法
take(5)对应sql中的top表示前5位
Skip(5)表示前5个结果以外的数据
First()它返回结果集中第一个匹配给定条件的元素
FirstOrDefault()返回的结果集中没有能匹配给定条件的,不会显示异常
4.Join查询
eg:var results=from n in names join o in orders on n.ID equals o.ID select n;