C#高级编程六十七天----LINQ提供程序

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 07:12:18

C#高级编程六十七天----LINQ提供程序的相关文章

C#高级编程六十八天---LINQ小结

LINQ小结 一.LINQ是什么 LINQ也就是Language Interrated Query的缩写,怎么一个缩写法我也不明白,即语言集成查询,是微软在.NET3.5中提出的一项新技术,LINQ主要包含四个组件,下面看一下LINQ的一个架构图: 简单的介绍一些四个组件: 1.Linq to SQL 组件----可以查询基于关于数据的数据(微软本身只是实现了对SQL Server的查询,可以对数据库中的数据进行查询,修改,插入删除,排序等操作) 2.LINQ to Dataset组件----可

C++面向对象高级编程(六)转换函数与non-explicit one argument ctor

技术在于交流.沟通,转载请注明出处并保持作品的完整性. 1.conversion function 转换函数 //1.转换函数 //conversion function //只要你认为合理 你可以任意写转换函数 class Fraction { public: Fraction(int num, int den = 1):m_numerator(num),m_denominator(den){} operator double() const //注意看 没有返回类型,这个编译器会帮做,且防止

C#高级编程六十六天----表达式树总结

表达式树总结 基础 表达式树提供了一个将可执行代码转换成数据的方法.如果你要在执行代码之前修改或转换此代码,那么它是很有用的.有其是当你要将C#代码----如LINQ查询表达式转换成其他代码在另一个程序----如SQL数据库里操作它. 表达式树的语法: 考虑下面简单的Lambda表达式: Func<int,int,int>function=(a,b)=>a+b; 这个语法包含三个部分: 1.一个声明 : Func<int,int,int>function 2.一个等号 : =

C#高级编程六十六天----表达式树总结【转】

https://blog.csdn.net/shanyongxu/article/details/47257139 表达式树总结 基础 表达式树提供了一个将可执行代码转换成数据的方法.如果你要在执行代码之前修改或转换此代码,那么它是很有用的.有其是当你要将C#代码----如LINQ查询表达式转换成其他代码在另一个程序----如SQL数据库里操作它. 表达式树的语法: 考虑下面简单的Lambda表达式: Func<int,int,int>function=(a,b)=>a+b; 这个语法包

【C#基础】Linq提供程序

1:Linq to Xml  命名空间System.Xml.Linq 2:Linq to Objects 3:Linq to Entities Linq to Objects的Where和Linq to Entities的Where这个两个类都在System.Linq名称空间的System.Core程序集中. 编译器如果选择使用哪个方法.表达式类型有什么用途.无论是用Func<TSource,bool>参数传递,还是用Expression<Func<TSource,bool>

C#高级编程六十三天----并行LINQ

并行LINQ .NET4在System.Linq命名空间中包含一个新类ParallelEnumerable,可以分解查询的工作使其分布在多个线程上.尽管Enumerable类给IEnumerable<T>接口定义了扩展方法,但ParallelEnumerable类的大多数扩展方法是ParallelQuery<TSource>类的扩展.一个重要的例外是AsParallel()方法,它扩展了IEnumerable<TSource>接口,返回ParallelQuery<

C#高级编程六十二天----LINQ标准的查询操作符

LINQ标准的查询操作符 首先我们来看一下LINQ的操作符,可根据查询操作符的操作"类型"进行分类,如把它们分成投影,限制,排序,联接,分组,串联,聚合,集合,生成,转换,元素,相等,量词,分割等. 类型 操作符名称 投影操作符 Select,SelectMany 限制操作符 Where 排序操作符 OrderBy,OrderByDescending,ThenBy,ThenByDescending,Reverse 联接操作符 Join,GroupJoin 分组操作符 GroupBy 串

C#高级编程六十九天----DLR简介

DLR 一.近年来,在TIOBE公司每个月发布的编程语言排行榜中,C#总是能挤进前十名,而在最近十年来,C#总体上呈现上升的趋势.C#能取得这样的成绩,有很多因素,其中它在语言特性上的锐意进取让人印象深刻. C#4动态功能是Dynamic Language Runtime(动态语言运行时,DLR)的一部分.DLR是添加到CLR的一系列服务,它允许添加动态语言,如Ruby和Python,并使C#具备和这些动态语言相同的某些功能. 动态编程语言并非什么新鲜事物,早在面向对象编程语言成为主流之前,人们

C#高级编程三十七天----结构比较

结构比较 数组和元组都实现接口IStructuralEquatable和IStructuralComparable.这两个接口不仅可以比较引用,还可以比较内容.这些接口都是显示实现的,所以在使用时需要把数组和元组强制转换为这个接口.IStructuralEquatable接口用于比较两个元组或数组是否有相同的内容,IStructuralComparable接口用于给元组或数组排序. using System; using System.Collections.Generic; using Sys