zoukankan      html  css  js  c++  java
  • LINQ 提供程序

    .NET 3.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。

    冯瑞涛
  • 相关阅读:
    Linux系统安装IonCube的方法详解教程
    CentOS7 安装 odoo10
    关于WPF的弹出窗口
    WPF命令使用
    WPF访问UserControl的自定义属性和事件
    一步步实现 Prism + MEF(二)--- 绑定命令
    一步步实现 Prism + MEF(一)--- 搭建框架
    MVVM里绑定TreeView控件的SelectedItem
    MAF框架的使用限制
    排序--归并排序算法
  • 原文地址:https://www.cnblogs.com/finehappy/p/1579122.html
Copyright © 2011-2022 走看看