2
我想动态创建一个包含运算符的linq表达式。这个linq表达式创建有什么问题(使用contains)
阅读与此主题有关的几个职位后,我想出了下面的代码,让我来执行“包含”之类的评价:
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表达式的知识缺乏有关。谁能告诉我我做错了什么?