绝大多数扩展方法都是对于泛型IEnumerable接口的扩展
Where方法:筛选匿名方法
每一项数据都会经过predicate的测试,如果针对一个元素,predicate执行的返回值为ture,那么这个元素就会放到返回值中
where参数是一个lambda表达式格式的匿名方法,方法的参数e表示当前判断的元素对象。参数的名字不一定非要叫e,不过一般lambda表达式中的变量名长度都不长
Count方法:
获取数据条数
Any方法:
是否至少有一条数据
获取一条数据(是否带参数的两种写法):
Single:有且只有一条满足要求的数据;
SingleOrDefault:最多只有一条满足要求的数据;
First:至少有一条,返回第一条;
FirstOrDefault:返回第一条或默认值;
选择合适的方法,“防御性编程‘
排序:
Order()对数据正序排序;
OrderByDescending()倒序排序;
对于简单类型排序,也许不用lambda表达式
特殊案例:按照最后一个字符排序;用Guid或者随机数进行随机排序
多规则排序:
可以在OrderBy和OrderByDescending的后面继续写ThenBy和ThenByDescending
限制结果集,只取部分数据
skip(n)跳过n条数据,Take(n)获取n条数据
例:获取从第二条开始获取的三条数据
var orderreditems = list.skip(2).Task(3);
聚合函数:
Max()、Min()、Average()、Sum()、Count()
LinQ中所有的扩展方法几乎都是针对IEnumerable接口的,而几乎所有能返回集合的都返回IEnumerable,所以是可以把几乎所有方法”链式调用”的
分组:
GroupBy()方法参数是分组条件表达式,返回值为IGrouping类型的泛型IEnumerable,也就是每一组以一个IGrouping对象的形式返回。
IGrouping是一个继承自IEnumerable的接口,IGrouping中Key属性表示这一组的分组数据的值。
投影:
把集合中的每一项转换为另外一种类型
.Select(e=> new{ })
LinQ的其他补充:
多使用链式调用
LinQ查询(方法)语法:无lambda表达式