我正在尝试为运行时创建的表生成Lambda表达式。 的表达是建立正常,但当我打电话编译()方法,我得到这个错误 “类型‘cseval.Item’的ParameterExpression不能被用于类型‘System.Object的’的委托参数” 这是我的功能动态对象的Lambda表达式
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'被允许在'Expression's。我没有看到代码中的任何东西看起来像是实际上需要'动态'类型。你试过用'object'代替'dynamic'吗? – 2014-12-13 08:51:19
是的,我已经尝试过,但同样的错误。 – Bakri 2014-12-13 08:58:05