【发布时间】:2014-12-13 08:37:20
【问题描述】:
我正在尝试为在运行时创建的表构建 Lambda 表达式。 表达式构建良好,但是当我调用 Compile() 方法时出现此错误 “'cseval.Item' 类型的 ParameterExpression 不能用于'System.Object' 类型的委托参数” 这是我的功能
public Func<dynamic, Boolean> GetWhereExp(List<WhereCondition> SearchFieldList, dynamic item)
{
ParameterExpression pe = Expression.Parameter(item.GetType(), "c");
Expression combined = null;
if (SearchFieldList != null)
{
foreach (WhereCondition fieldItem in SearchFieldList)
{
//Expression for accessing Fields name property
Expression columnNameProperty = Expression.Property(pe, fieldItem.ColumName);
//the name constant to match
Expression columnValue = Expression.Constant(fieldItem.Value);
//the first expression: PatientantLastName = ?
Expression e1 = Expression.Equal(columnNameProperty, columnValue);
if (combined == null)
{
combined = e;
}
else
{
combined = Expression.And(combined, e);
}
}
}
var result = Expression.Lambda<Func<dynamic, bool>>(combined, pe);
return result.Compile();
}
【问题讨论】:
-
我不相信
dynamic允许在Expressions 中使用。我在您的代码中看不到任何看起来实际上需要dynamic类型的内容。您是否尝试过将dynamic替换为object? -
是的,我试过了,但同样的错误。