就像你所看到的那样,LINQ很像SQL(结构化查询语言)。然而,LINQ实际上完全是集成在.NET Framework中的(在某种意义上来说,其实就是System.Linq命名空间)。System.Linq命名空间定义在System.Core.dll程序集中,其中含有一些看上去非常复杂的扩展方法(位于Queryable类中),比如:
public static IQueryable Where( 以及 public static IQueryable Select( 这些方法看上去很复杂(尤其是对那些还没有学过泛型的人来说),不过从方法头可以看出,它们都是用于扩展IQueryable的泛型扩展方法。另外,这里用了很多的泛型。(这些方法头部看起来很乱,不过可以肯定的是,LINQ将会使其在实际应用中更加简单)。 我们来看看Where方法,假如你忽略掉所有尖括号,那么就将得到如下形式: public static IQueryable Where(this IQueryable source,Expression predicate) 这样看上去就简单多了。Where是一个用于扩展IQueryable的扩展方法,它接受一个用作判定预言的Expression(结果集中的内容就取决于此),并返回IQueryable。如果你把多有的尖括号再加回去的话,所得到的代码就更加灵活了,因为它能够用于包含任意类型数据的IQueryable对象。 简而言之,这意味着LINQ的基础就是扩展方法(还有泛型)。因此,在你编写了一个LINQ语句之后,编译器就会据此发出一系列外形更加复杂的泛型方法。
this IQueryable source,Expression
this IQueryable source,Expression