zoukankan      html  css  js  c++  java
  • C#编程(六十七)----------LINQ提供程序

      原文链接:http://blog.csdn.net/shanyongxu/article/details/47257511  

    LINQ提供程序

    .NET3.5包含了几个LINQ提供程序.

    LINQ提供程序为特定的数据源实现了标准的查询操作符.

    LINQ提供程序也许会实现LINQ定义的更多扩展方法,但至少要实现标准操作符.

    LINQ to XML 不仅实现了专门用于XML 的方法,还实现了其他方法,例如System.Xml.Linq 命名空间的Extensions类定义的方法Elements(),Descendants 和Ancestors。

    LINQ提供程序的实现方案是根据命名空间和第一个参数的类型来实现的.

    实现扩展方法的类的命名空间必须是打开的,否则扩展类就不在作用域内。

    在LINQ to Objects 中定义的Wherer()方法参数和在LINQ to SQL中定义的Wherer()方法参数是不同的。 
    LINQ to Objects 中的Wherer()方法是用Enumerable 类定义的: 
    public static IEnumerable <TSource> Where <TSource> (this IEnumerable <TSource> source, Func <TSource, bool> predicate); 
    在 System.Linq 命名空间中,还有另一个类实现了操作符Where。这个实现代码由LINQ to SQL 使用, 
    这些代码在类Queryable 中: 
    public static IQueryable <TSource> Where <TSource> (this IQueryable <TSource> source, Expression < Func <TSource, bool> > predicate); 
    这两个类都在System.Linq 命名空间的System.Core 程序集中实现。

    那么,它是如何定义的?使用了什么方法?

    无论是用Func<TSource, bool>参数传送,还是用Expression< Func<TSource,bool>>参数传送,

    λ表达式都是相同的。只是编译器的操作是不同的,它根据source 参数来选择。

    编译器根据其参数选择最匹配的方法。

    在LINQ to SQL 中定义的DataContext 类的GetTable()方法返回IQueryable<TSource>,因此LINQ to SQL 使用类Queryable 的Wherer()方法。 
    LINQ to SQL 提供程序使用表达式树,实现了接口IQueryable 和IQueryProvider。

    LINQ提供程序属于高级主体,对我我这样的屌丝来说,目前还望尘莫及啊.

    详细参考:https://msdn.microsoft.com/zh-cn/library/bb546158(v=vs.120).aspx

  • 相关阅读:
    双循环解决添加列表问题
    贪心算法
    隔板法发红包
    python小兵之时间模块
    开发规范
    python 小兵(12)模块1
    Linux系统
    刷题
    Socket
    栈和队列
  • 原文地址:https://www.cnblogs.com/android-blogs/p/6631978.html
Copyright © 2011-2022 走看看