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

3
我正在尝试使用包含运算符动态创建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表达式知识不足有关。有人能告诉我我做错了什么吗?

1个回答

8

StringContains 已经返回一个 LambdaExpression

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接