2011-08-01 31 views
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表达式的知识缺乏有关。谁能告诉我我做错了什么?

回答

8

StringContains已经返回LambdaExpression

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

相关问题