Ari*_*ian 1 c# linq lambda expression-trees c#-4.0
我想为此动态创建一个 lambda 表达式:
(o => o.Year == year && o.CityCode == cityCode && o.Status == status)
Run Code Online (Sandbox Code Playgroud)
我这样写:
var body = Expression.AndAlso(
Expression.Equal(
Expression.PropertyOrField(param, "Year"),
Expression.Constant(year)
),
Expression.Equal(
Expression.PropertyOrField(param, "CityCode"),
Expression.Constant(cityCode)
)
,
Expression.Equal(
Expression.PropertyOrField(param, "Status"),
Expression.Constant(status)
)
);
Run Code Online (Sandbox Code Playgroud)
但对于这段代码:
Expression.Equal(
Expression.PropertyOrField(param, "Status"),
Expression.Constant(status)
)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
无法从“System.Linq.Expressions.BinaryExpression”转换为“System.Reflection.MethodInfo”
如何向 lambda 表达式添加 3 个条件?
Expression.AndAlso需要两个表达式。有一个需要三个参数的重载,但第三个参数是对两个操作数实现andMethodInfo运算的方法(在这种情况下还有进一步的限制,因为它不允许覆盖真实性的细节,因此第一个操作数仍然需要有一个and运算符或者可以转换为)。AndAlsotruefalsebool
所以你想要的相当于:
(o => o.Year == year && (o.CityCode == cityCode && o.Status == status))
Run Code Online (Sandbox Code Playgroud)
这将是:
var body = Expression.AndAlso(
Expression.Equal(
Expression.PropertyOrField(param, "Year"),
Expression.Constant(year)
),
Expression.AndAlso(
Expression.Equal(
Expression.PropertyOrField(param, "CityCode"),
Expression.Constant(cityCode)
),
Expression.Equal(
Expression.PropertyOrField(param, "Status"),
Expression.Constant(status)
)
)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2500 次 |
| 最近记录: |