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。

    冯瑞涛
  • 相关阅读:
    PHP获取一周的日期
    关系型数据库和非关系型数据库的区别和特点
    关系型数据库和非关系型数据库的特性以及各自的优缺点
    什么是数据库?什么是关系数据库?什么是非关系型数据库?
    PHP中把对象转数组的几个方法
    验证银行卡号
    xss过滤方法
    PHP 随机字符
    计算两个日期相差年月日
    判断一个时间段是否包含周末
  • 原文地址:https://www.cnblogs.com/finehappy/p/1579122.html
Copyright © 2011-2022 走看看