当前位置:首页 > Windows程序 > 正文

C#高级编程六十七天

2021-03-28 Windows程序

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

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68920.html