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

  • 相关阅读:
    serialVersionUID作用
    为什么要使用SLF4J而不是Log4J
    认识Log4j
    Java解析xml文件四种方式
    数据结构之R进制转换
    栈的压入、弹出序列
    中间件学习之RMI+JDBC远端数据库的访问
    Linux程序设计综合训练之简易Web服务器
    Html5笔记之小结
    PhoneGap + Dreamweaver 5.5 无法在模拟器中打开的问题
  • 原文地址:https://www.cnblogs.com/FinleyJiang/p/7602789.html
Copyright © 2011-2022 走看看