Linq将方法评估为lambda表达式

时间:2009-07-22 06:09:12

标签: c# linq lambda

我试图使用linq表达式从List中进行选择,其中range变量在返回boolean的静态方法中求值。我想选择在使用方法计算范围变量时返回true的范围变量。

var result = from rangeVariable in DataSource
             where (rangeVariable => Foo.MethodReturnsBoolean(rangeVariable) == true)
             select rangeVariable;

我收到此错误:

无法将Lambda Expression转换为'bool'类型,因为它不是委托类型。

任何人都可以解释发生了什么,以及我如何实现这一目标?

1 个答案:

答案 0 :(得分:18)

您不需要“where”子句中的lambda表达式 - 查询表达式转换会为您执行此操作。只需使用:

var result = from rangeVariable in DataSource
             where Foo.MethodReturnsBoolean(rangeVariable) == true
             select rangeVariable;

我个人会删除“== true”冗余(我知道这只是示例代码,但是......):

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

那多清洁了多少? :)