我试图使用linq表达式从List中进行选择,其中range变量在返回boolean的静态方法中求值.我想选择在使用该方法计算范围变量时返回true的范围变量.
var result = from rangeVariable in DataSource
where (rangeVariable => Foo.MethodReturnsBoolean(rangeVariable) == true)
select rangeVariable;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
无法将Lambda Expression转换为'bool'类型,因为它不是委托类型.
任何人都可以解释发生了什么,以及我如何实现这一目标?
Jon*_*eet 18
您不需要"where"子句中的lambda表达式 - 查询表达式转换为您执行此操作.只需使用:
var result = from rangeVariable in DataSource
where Foo.MethodReturnsBoolean(rangeVariable) == true
select rangeVariable;
Run Code Online (Sandbox Code Playgroud)
我个人然后删除"== true"冗余(我知道这只是示例代码,但是......):
var result = from rangeVariable in DataSource
where Foo.MethodReturnsBoolean(rangeVariable)
select rangeVariable;
Run Code Online (Sandbox Code Playgroud)
然后我会考虑使用查询表达式实际上是在为你买单.如果你只是做"在哪里"(或只是做"选择")你可能会发现点符号更简单:
var result = DataSource.Where(x => Foo.MethodReturnsBoolean(x));
Run Code Online (Sandbox Code Playgroud)
它变得更好:编译器不需要从lambda表达式推断返回值(因为它总是如此bool)所以你可以使用方法组转换:
var result = DataSource.Where(Foo.MethodReturnsBoolean);
Run Code Online (Sandbox Code Playgroud)
这有多清洁?:)
| 归档时间: |
|
| 查看次数: |
2300 次 |
| 最近记录: |