• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 编程与数据库 > net编程 >

LINQ那些事儿(4)- Query Expression和Query Operator(3)

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-06-27点击:

02 LambdaExpression expr = Expression.Lambda(
03 Expression.Add(Expression.Constant(2), Expression.Constant(3))) // 正确,定义节点
04
05 Expression<Func<int>> expr = () => 2 + 3;    //正确,定义节点
06 var expr = Expression.Lambda<Func<int>>(
07 Expression.Add(Expression.Constant(2), Expression.Constant(3))) // 正确,定义节点
08
09 Func<int> fn = () => 2 + 3;        // 正确,定义委托
10 Func<int> fn = () => { return 2 + 3; } //正确,定义委托

 

这里问个问题,你认为下面的语句1和语句2会导致查询操作有什么区别(输出结果都是6)?答案在“LINQ那些事(8)”。

1 var context = GenerateContext();
2 Expression<Func<Customer, bool>> condition = c => c.City == "London";
3
4 var result1 = context.Customers.Where(condition);               // 1
5 var result2 = context.Customers.Where(condition.Compile());     // 2
6
7 Console.WriteLine(result1.Count());
8 Console.WriteLine(result2.Count());

Query Operator

指的是在Enumerable和Queryable类中定义的用于用于对数据进行project/filter操作等的extension method,包括Where/Select/Join/OrderBy/GroupBy等。
Query Expression

刚接触LINQ的时候感觉最特别就是可以用类sql的语句在csharp代码里写查询语句

1 var result =
2 from c in context.Customers
3 where c.City == "London"
4 select c;

VS对Query expression提供了诸多支持,包括intelligent sense和编译检查等等。但select和where在IL里是没有,只是compiler在运行时根据query expression转化成对Query operator的调用。但是,并不是所有的query operator在query expression有等价表达,query expression支持的operator只有:

Select/SelectMany/Join/GroupJoin/Where/OrderBy/OrderByDescending/GroupBy/ThenBy/ThenByDescending。

既然query operator是通过extension method的方式提供,这就意味着我们可以通过自己编写extension method,来改变query expression的行为,我们看下面的代码:

01 public static class QueryOperatorExt

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1978130638@qq.com ,  QQ