Linq将方法评估为lambda表达式
问题描述:
我正在尝试从使用linq表达式的列表中选择范围变量在返回布尔值的静态方法中进行评估。我想选择范围变量,当使用该方法计算范围变量时返回true。Linq将方法评估为lambda表达式
var result = from rangeVariable in DataSource
where (rangeVariable => Foo.MethodReturnsBoolean(rangeVariable) == true)
select rangeVariable;
我得到这个错误:
无法转换lambda表达式“BOOL”类型,因为它不是一个委托类型。
任何人都可以解释发生了什么,我怎么能做到这一点?
答
您不需要“where”子句中的lambda表达式 - 查询表达式翻译会为您执行此操作。只需使用:
var result = from rangeVariable in DataSource
where Foo.MethodReturnsBoolean(rangeVariable) == true
select rangeVariable;
我会亲自然后去掉“==真”冗余(我知道这只是示例代码,但是...):
var result = from rangeVariable in DataSource
where Foo.MethodReturnsBoolean(rangeVariable)
select rangeVariable;
我会再考虑什么使用查询表达式实际上是在购买你。如果你只是做一个“where”(或只是做一个“选择”),你可能会发现点符号简单:
var result = DataSource.Where(x => Foo.MethodReturnsBoolean(x));
它会变得更好,但:编译器不需要推断从lambda表达式返回值(因为它总是会bool
),所以你可以只用一个方法组转换:
var result = DataSource.Where(Foo.MethodReturnsBoolean);
如何更清洁的是什么? :)
非常!谢谢乔恩! – theringostarrs 2009-07-22 06:26:13