В этой версии EF Core есть способ сделать условную сумму. При условии, что код не будет переведен в требуемый SQL с GROUP BY
, но, возможно, какая-то будущая версия будет поддерживать его таким образом. Сейчас вы можете попробовать что-то вроде этого:
var headerTask = cases
.Select(c => new
{
c.Flag,
c.YourKey,
//other properties
})
.GroupBy(c => c.YourKey, (k, g) => new CaseHeader
{
TotalCases = g.Count(),
// ... A number of other aggregates
TotalFlagCases = g.Sum(b => a.Flag ? 1 : 0)
});
Когда вы проецируете свою сущность в анонимный тип, а затем группируете ее и используете условный оператор в статистической функции, она будет преобразована в SQL с GROUP BY
и агрегатами, такими как:
SELECT COUNT(*) AS [TotalCases], SUM(CASE
WHEN [c].[Flag] = 1
THEN 1 ELSE 0
END) AS [TotalFlagCases]
FROM [Cases] AS [c]
GROUP BY [c].[YourKey]
Если вы не проецируете его на анонимный тип, поэтому, если отсутствует указанная выше Select
функция, она не будет преобразована в SQL с GROUP BY
. Похоже, что переводчик запросов для этого предварительного выпуска не поддерживает его или это ошибка.