Найти максимальное значение всех свойств в списке объектов - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть следующий запрос 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 Ответ

1 голос
/ 25 апреля 2019

Я не проверял это с асинхронными версиями 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();
...