将Lambda-Expressions动态组合在哪里

时间:2016-07-29 12:21:42

标签: c# .net collections lambda

我有一个lambda表达式列表List<Func<SomeObject, bool>> filterList; 此筛选器列表用于轻松过滤SomeObject的集合:

List<SomeObject> randomList; //filled with random stuff

foreach (Func<SomeObject, bool> filter in filterlist)
    randomList = randomList.Where(filter).ToList();

现在我想组合一些过滤器 - 但我想将它们与AND或OR语句结合起来。 例如:用户有3个过滤器A,B和C,并希望将它们组合成类似于&#34; A&amp;&amp ;; (B || C)。

我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:2)

您正在使用Func<T>,而不是Expression<Func<T>>,这使得无法“重写”它们,或者将多个func组合在一起。因此,您只能按特定顺序执行它们。

您已将它们与AND组合。

要将两个(或更多)标准与OR组合,请执行以下操作:

randomList = randomList.Where(x => filter1(x) || filter2(x)).ToList();

要执行A && (B || C),请执行以下操作:

randomList = randomList.Where(x => filterA(x) && (filterB(x) || filterC(x))).ToList();