快速业务通道

LINQ学习笔记:表达式树

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-13

(注:对于类似的扩展方法,我们应该编写一个全新的文件从而避免去覆盖由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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号