【发布时间】:2016-08-12 10:40:40
【问题描述】:
好的,这就是我正在动态创建一个表达式以针对数据库执行的问题,它工作正常。当我使用 Expression.AndAlso 添加另一个表达式时出现问题,表达式组合得很好,但参数不起作用,我的代码如下。
Expression<Func<Invoice, bool>> condition = null;
ParameterExpression[] param = new ParameterExpression[sessionModel.FilterChildren.Count];
foreach (var filter in sessionModel.FilterChildren) {
param[i] = Expression.Parameter(typeof(Invoice), filter.SysName);
Type type = Type.GetType(filter.Type);
if (i == 0)
condition =
Expression.Lambda<Func<Invoice, bool>>(
Expression.Equal(
Expression.Property(param[i], filter.SysName),
Expression.Constant(filter.Value, type)
),
param[i]);
else {
var newCond = Expression.Lambda<Func<Invoice, bool>>(
Expression.Equal(
Expression.Property(param[i], filter.SysName),
Expression.Constant(filter.Value, type)
),
param[i]);
var test = Expression.AndAlso(condition.Body, newCond.Body);
condition = Expression.Lambda<Func<Invoice, bool>>(test, param);
}
i++;
}
会报错
Incorrect number of parameters supplied for lambda declaration
每个要添加的表达式都有不同的参数。
任何想法我哪里出错了?
谢谢
【问题讨论】:
-
您是否在
if块之前为condition赋值? -
我已经更新了我的问题以显示之前的名称:)
-
好吧,我希望 NullReferenceException 像你一样
Expression<Func<Invoice, bool>> condition = null;然后如果没有触发块var test = Expression.AndAlso(condition.Body, newCond.Body);但我猜i最初也是 0,所以情况并非如此.哪一行抛出异常?AndAlso部分对我没有经验的眼睛来说似乎没问题。 -
很快 - 你应该使用一个相同的参数。
-
问题出在 line condition = Expression.Lambda
>(test, param);并且似乎也可以正常工作
标签: c# entity-framework lambda expression