这个linq表达式创建有什么问题(使用contains)

Ama*_*son 2 c# lambda linq-expressions

我试图用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);
}
Run Code Online (Sandbox Code Playgroud)

这就是这样称呼的:

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

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

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

其中"DAL.BestAvailableFIP"是"TEntity"类型.

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

SLa*_*aks 8

StringContains已经退货了LambdaExpression.

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