我正在尝试使用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表达式缺乏了解有关。谁能告诉我我做错了什么?
答案 0 :(得分:8)
StringContains
已经返回LambdaExpression
。
你不应该把它放在另一个lambda表达式中
如果要创建包含它的另一个lambda表达式,则应使用其Body
。