[英]Convert Expression to Expression.Lambda<Func<object, bool>>
我有一個根據傳遞給該方法的對象的類型來構建表達式樹的方法。 生成樹后,我要對其進行轉換,並使用如下所示的返回類型將其返回。
public static Expression<Func<object, bool>> BuildExpression(Type type, ...)
{
// build the expression...
ParameterExpression param = Expression.Parameter(type, "m");
Expression expression = null;
// simplified version of building the expression tree
MemberExpression member = Expression.Property(param, filter.Property);
ConstantExpression constant = Expression.Constant(filter.Value);
expression = Expression.Equal(member, constant);
// ...
// IT FAILS ON THIS LINE!!!
return Expression.Lambda<Func<object, bool>>(expression, param);
}
我看了一些轉換答案,但無濟於事。 有什么建議嗎?
這是經過修改的代碼,如我之前的評論中所述。
1)您的函數返回使用單個參數描述函數的表達式。 這個參數是Object
類型的。 因此,在創建參數“ m”表達式時應使用Object
類型。
2)在訪問屬性參數之前,應將其強制轉換回所需的類型。 參見Expression.Convert
。
public static Expression<Func<object, bool>> BuildExpression(Type type, ...)
{
// build the expression...
ParameterExpression param = Expression.Parameter(typeof(Object), "m");
Expression expression = null;
UnaryExpression convert = Expression.Convert(param, type);
// simplified version of building the expression tree
MemberExpression member = Expression.Property(convert, filter.Property);
ConstantExpression constant = Expression.Constant(filter.Value);
expression = Expression.Equal(member, constant);
// ...
return Expression.Lambda<Func<object, bool>>(expression, param);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.