Использование EF Core 2.1, который поддерживает групповую трансляцию, но не после того, как я спроецировал значение ключа.
У меня есть запрос, который должен разрешить диапазон типов группировки и диапазон типов агрегатов.
Группировка по: Год, Год / Месяц, Год / Месяц / День и т. Д.
Совокупность по: Ср., Сумма, Мин., Макс. И т. Д.
Я создал два switch
заявления, один для группировки и один для агрегации.Моя проблема в том, что я не могу отложить выполнение и выполнить группировку в SQL.Если нет, то результирующий набор данных будет довольно большим.
Является ли какой-либо из этих подходов разумным или я должен просто использовать необработанный запрос?
Это отложено и сгруппировано по желанию, но тип ключауникален для года / месяца, и я не могу предоставить общее решение для агрегатов во втором switch
, если бы я хотел сгруппировать что-то другое, например год / месяц / день.
var query1 = series
.GroupBy(k => new { k.Created.Year, k.Created.Month, });
var result1 = query1
.Select(i => new { i.Key, Value = i.Average(a => a.DataValue) });
Как только вы преобразуете ключ в строку, группировка происходит на стороне клиента:
var query2 = series
.GroupBy(k => k.Created.Year.ToString());
var result2 = query2
.Select(i => new { i.Key, Value = i.Average(a => a.DataValue) });
Это также вызывает группирование на стороне клиента:
var query3 = series
.GroupBy(k => new { k.Created.Year, k.Created.Month, })
.Select(i => new
{
Key = $"{i.Key.Year}-{i.Key.Month}",
Values = i.ToList()
});
Любые идеи, как это сделатьзапрос?В идеале мне нужен общий групповой ключ, который группирует на стороне сервера, или метод передачи агрегата на основе функции в запросе.Генерация ключа на основе string
обеспечивает группировку на стороне клиента.