LINQ学习笔记:表达式树
(注:对于类似的扩展方法,我们应该编写一个全新的文件从而避免去覆盖由VS的设计器自动产生的文件.) 此方法可以同时被用于本地查询和解释查询,如下所示: 1: void Test( ) 2:
3: {
4:
5: var dataContext = new MyTypedDataContext (“connectionString”); 6:
7: Product[] localProducts =
8:
9: dataContext.Products.ToArray( );
10:
11: IQueryable sqlQuery =
12:
13: dataContext.Products.Where(Product.IsSelling());
14:
15: IEnumerable localQuery =
16:
17: localProducts.Where(Product.IsSelling.Compile());
18:
19: }
相比之下, 我们并不能将一个委托转换为表达式树,这也使得表达式树更加有用. AsQueryable 使用AsQueryable操作符可以编写用于操作本地或者远程序列的查询: 1: IQueryable FilterSortProducts
2:
3: (IQueryable input)
4:
5: {
6:
7: return from p in input 8:
9: where … 10:
11: order by …
12:
13: select p;
14:
15: }
16:
17: void Test() 18:
19: {
20:
21: var dataContext = new MyTypedDataContext (“connectionString”); 22:
23: Product[]localProducts =
24:
25: dataContext.Products.ToArray();
26:
27: var sqlQuery =
28:
29: FilterSortProducts (dataContext.Products);
30:
31: var localQuery =
32:
33: FilterSortProducts (localProducts.AsQueryable());
34:
35: }
AsQueryable对本地查询包装了一层Queryable<>外衣,这使得接下来的子查询都是针对表达式树的.当你开始枚举结果集的时候,表达式树会被隐式编译转换成为本地查询然后向往常一直执行. 表达式树 我们之前说过将一个Lambda表达式赋值给一个Expression类型变量会引起C#编译器解析表达式树.使用编程手段, 我们可以在运行时做相同的事情-换句话说, 从零开始动态创建表达式树. 结果集可以被转换为Expression并被使用于LINQ to SQL查询中,或者通过调用Compile |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |