C#表达树

在LINQ to Objects中,扩展方法需要将一个委托类型作为参数,这样就可以将lambda表达式赋予参数。lambda表达式也可以赋予Expression类型的参数。C#编译器根据类型给lambda表达式定义不同的行为。如果类型是Expression,编译器就从lambda表达式中创建一个表达式树,并存储在程序集中。这样,就可以在运行期间分析表达式树,并进行优化,以便于查询数据源。
下面看看一个前面使用的查询表达式(代码文件ExpressionTreeSample/Program.cs);
var brazilRacers = from r in racers
where r.Country == “Brazil”
orderby r.Wins
select r;
这个查询表达式使用了扩展方法Where()、OrderByO和Select()。 Enumerable类定义了Where)扩展方法,并将委托类型Func<T,bool>作为参数谓词。
public static IEnumerable Where{
this IEnumerable source, Func<TSource, bool> predicate);
这样,就把lambda表达式赋予谓词。这里lambda表达式类似于前面介绍的匿名方法。
Func<Racer, bool> predicate =r => r.Country == “Brazil”;
Enumerable类不是唯—一个定义了扩展方法Where()的类。Queryable类也定义了WhereO扩展方法。这个类对Where(扩展方法的定义是不同的:
public static IQueryable Where
(this IQueryable source,
Expression<Func<TSource, bool>> predicate):
其中,把lambda表达式赋予类型Expression,该类型的操

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值