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