簡體   English   中英

將Expression轉換為Expression.Lambda <Func<object, bool> &gt;

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM