-->

LINQ:构建动态的过滤器与运算的顺序(LINQ: Build dynamic filter wit

2019-09-19 04:33发布

我挣扎动态地创建这样一个查询:

Dictionary<string, Guid> parms = new Dictionary<string, Guid>();

foreach (var kvp in parms)
{
    var exp = ReportDefinitions.Where(x=> 
        x.Discriminants.Any(y=> y.Key == kvp.Key && y.Value == kvp.Value)
// && more conditions to add here at each cycle
        );  
}

其中ReportDefinitions.Discriminants是IDictionary<string, Guid> ; 我知道如何建立简单的表达,但我无法弄清楚如何建立这一个“任意”似乎非常复杂。 在任何呼叫很难已了解

任何人都知道如何应对呢?

Answer 1:

var query = parms.Aggregate(ReportDefinitions.AsQueryable(),
  (a, kvp) => a.Where(x => x.Discriminants.Any(
     y => y.Key == kvp.Key && y.Value == kvp.Value)));

我们开始与ReportDefinitions的未经过滤的查询,并在所有的查询参数都折叠。 最终的结果是嵌套滤波器的序列这相当于与运算的序列。

关键的观点是,这个过程很好地映射到一个减少函数式语言闻名。 LINQ到对象通过支持它Aggregate



文章来源: LINQ: Build dynamic filter with sequence of ANDs