我正在尝试使用 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 表达式缺乏了解有关。谁能告诉我我做错了什么?