我正在使用
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
对象挤出来?
是否有方法或属性可以将
内部的Func<Airplane, bool>
对象挤出来?criterion
Expression<TDelegate>.Compile
方法。
IEnumerable<AirPlane> wantedAirplanes = manyAirplanes.Where(criterion.Compile());