在对象列表中查找所有属性的最大值

时间:2019-04-24 20:40:47

标签: entity-framework entity-framework-core linq-to-entities

我有以下Entity Framework Core查询:

  IQueryable<Product> products = context.Products;

  var maximums = new MaximumModel {
    PA = await products.MaxAsync(x => x.Composition.PA)
    PB = await products.MaxAsync(x => x.Composition.PB)
    PC = await products.MaxAsync(x => x.Composition.PC)
    PD = await products.MaxAsync(x => x.Composition.PD)
    // Other 36 properties ...
  }

这将执行40个查​​询,每个查询一个...

是否可以仅执行一个查询?

1 个答案:

答案 0 :(得分:1)

我尚未使用EF异步版本对此进行过测试,但是LINQ to SQL解决方案是使用GroupBy中的单例组将查询合并为一个查询:

var maximums = await products.GroupBy(p => 1)
                             .Select(pg => new MaximumModel {
                                                PA = pg.Max(x => x.Composition.PA),
                                                PB = pg.Max(x => x.Composition.PB),
                                                PC = pg.Max(x => x.Composition.PC),
                                                PD = pg.Max(x => x.Composition.PD),
                                                  // Other 36 properties ...
                             }).FirstAsync();