如何在 LinqWhere() 方法中使用 lambda 表达式变量?

问题描述 投票:0回答:1

我正在使用

Expression
对象,例如这里的
criterion

public class Airplane
{
    int MaxSpeed { get; set; }
    int WingSpan { get; set; }
}

Expression<Func<Airplane, bool>> criterion = ap => ap.MaxSpeed > 160;

我想使用

criterion
来过滤
List<Airplane>
对象。

我可以剖析

criterion
以找出
((BinaryExpression)criterion.Body).Left
MaxSpeed
属性,
((BinaryExpression)criterion.Body).Right
的值是 160 等等,并从中重新创建
Where()
条件。我已经尝试过了,效果很好。

但是,按原样使用

criterion
会更简单(并且与我的项目上下文更相关),因为它已经包含我想要的条件。

类似的东西

List<AirPlane> manyAirplanes;

// [...] Setting the contents of manyAirplanes

List<AirPlane> wantedAirplanes = manyAirplanes.Where(criterion);

显然,这不会编译,因为我正在尝试使用

Expression
对象,其中
Where()
期待
Func<AirPlane, bool>

我尝试使用这个答案,但它仍然需要我提供

criterion
中的参数。

是否有方法或属性可以将

Func<Airplane, bool>
内部的
criterion
对象挤出来?

c# linq lambda
1个回答
0
投票

是否有方法或属性可以将

Func<Airplane, bool>
内部的
criterion
对象挤出来?

这就是

Expression<TDelegate>.Compile
方法

IEnumerable<AirPlane> wantedAirplanes = manyAirplanes.Where(criterion.Compile());
© www.soinside.com 2019 - 2024. All rights reserved.