3

我正在尝试使用 contains 运算符动态创建 linq 表达式。

在阅读了与该主题相关的几篇文章后,我提出了以下代码,可以让我执行“包含”之类的评估:

internal static Expression<Func<TEntity, bool>> StringContains<TEntity>(string propertyName, string subString)
{
    MethodInfo contains = typeof(JsonLinqParser_Paser).GetMethod("Like");
    var param = Expression.Parameter(typeof(TEntity));
    var body = Expression.Call(contains, Expression.Property(param, propertyName), Expression.Constant(subString, typeof(string)));

    var lambda = Expression.Lambda<Func<TEntity, bool>>(body, param);

    return lambda;
}
public static bool Like(string a, string b)
{
    return a.Contains(b);
}

这就是这样调用的:

var expression = Expression.Lambda<Func<TEntity, bool>>(StringContains<TEntity>("FIPSCO_STR", _myStringValue), param);

但是,在运行时,我收到如下错误:

“System.Func`2[DAL.BestAvailableFIP,System.Boolean]”类型的表达式不能用于返回类型“System.Boolean”

其中“DAL.BestAvailableFIP”是“TEntity”类型。

我确信这都与我对 lambda 表达式缺乏了解有关。谁能告诉我我做错了什么?

4

1 回答 1

8

StringContains已经返回一个LambdaExpression.

你不应该把它放在另一个 lambda 表达式中。
如果你想创建另一个包含它的 lambda 表达式,你应该使用它的Body.

于 2011-08-01T19:44:51.440 回答