我有一个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)。
我不知道如何做到这一点。
答案 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();