Enumerable的扩展方法采用线性流程,每个运算法会被线性执行。这种执行方法如果操作类似关系型数据库数据源,效率会非常低下,所以Queryable重新定义这些扩展方法,把LINQ表达式拆解为表达式树,提供程序就可以根据表达式树生成关系型数据库的查询语句,即SQL命令,然后进行相关操作。
每个查询运算符的执行行为不同,大致分为立即执行和延时执行。延时执行的运算符将在枚举元素的时候被执行。
Enumerable类位于程序集System.Core.dll中,System.Linq命名空间下,并且直接集成自System.Object,存在于3.5及以上的.NET框架中。Enumerable是静态类,不能实例化和被继承,其成员只有一组静态和扩展方法。
LINQ不仅能够查询实现IEnumerable<T>或IQueryable<T>的类型,也能查询实现IEnumerable接口的类型。关于Enumerable方法的详细说明,请参考MSDN Enumerable 类
理解LINQ首先必须理解扩展方法
msdn是这样规定扩展方法的:“扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。”
下面给个扩展方法的例子如下:
|
程序的运行结果如下:
-----插曲,想到了就加进来,有助于理解开头的几段话及LINQ原理
---------------------------------------------------------------”
为了方便理解和记忆,DebugLZQ将常用的延时执行的Enumerable类方法成员分了下组,具体如下:
1、Take用于从一个序列的开头返回指定数量的元素
2、TakeWhile 用于获取指定序列从头开始符合条件的元素,直到遇到不符合条件的元素为止