扩展方法是如何支持LINQ的

时间:2021-04-16

  就像你所看到的那样,LINQ很像SQL(结构化查询语言)。然而,LINQ实际上完全是集成在.NET Framework中的(在某种意义上来说,其实就是System.Linq命名空间)。System.Linq命名空间定义在System.Core.dll程序集中,其中含有一些看上去非常复杂的扩展方法(位于Queryable类中),比如:

public static IQueryable Where(
this IQueryable source,Expression

以及

public static IQueryable Select(
this IQueryable source,Expression

  这些方法看上去很复杂(尤其是对那些还没有学过泛型的人来说),不过从方法头可以看出,它们都是用于扩展IQueryable的泛型扩展方法。另外,这里用了很多的泛型。(这些方法头部看起来很乱,不过可以肯定的是,LINQ将会使其在实际应用中更加简单)。

  我们来看看Where方法,假如你忽略掉所有尖括号,那么就将得到如下形式:

public static IQueryable Where(this IQueryable source,Expression predicate)

  这样看上去就简单多了。Where是一个用于扩展IQueryable的扩展方法,它接受一个用作判定预言的Expression(结果集中的内容就取决于此),并返回IQueryable。如果你把多有的尖括号再加回去的话,所得到的代码就更加灵活了,因为它能够用于包含任意类型数据的IQueryable对象。

  简而言之,这意味着LINQ的基础就是扩展方法(还有泛型)。因此,在你编写了一个LINQ语句之后,编译器就会据此发出一系列外形更加复杂的泛型方法。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章