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); 

如何更清洁的是什么? :)

+0

非常!谢谢乔恩! – theringostarrs 2009-07-22 06:26:13