我正在尝试将多项选择与lambda函数组合成一个lambda表达式。我怎么做?我知道最后一行是错的,但让你知道我的意思。
Func<Event, bool> where = null;
if (!string.IsNullOrWhiteSpace(searchToken))
where = q => q.Name.ToUpper().Contains(searchToken.ToUpper());
where += q => q.Hidden = false;
Expression<Func<Event, bool>> where1 = q => where; <-- Erroring
答案 0 :(得分:4)
我怀疑你想要PredicateBuilder
。 (该页面上提供了该来源。)您可以这样使用它:
var predicate = q => !q.Hidden;
if (!string.IsNullOrWhiteSpace(searchToken))
{
predicate = predicate.And(q => q.Name.ToUpper()
.Contains(searchToken.ToUpper());
}
return predicate;
假设你想要“和”条件 - 你从来没有说清楚......
请注意,不是一种以不区分大小写的方式进行比较的好方法。如果您可以告诉我们将使用查询(例如LINQ to SQL,LINQ to EF),我们可以建议一种与提供程序兼容的方法来执行不区分大小写的查询。
答案 1 :(得分:0)
看看http://msdn.microsoft.com/en-us/library/bb882637.aspx。如何使用表达式树来构建动态查询。
使用Expression&lt;&gt;时的AFAIK这样表达式必须在编译时知道,因为编译器然后构建AST抽象语法三并将其作为数据存储在Expression&lt;&gt;中实例