Entity Framework 分组查询翻译成多个 SELECT

Entity Framework grouped query translated into multiple SELECTs

有人可以帮忙告诉我为什么这个 LINQ 查询在 EF 中被翻译成多个 SELECT 吗?

var query = db.ReportedFulfillments.GroupBy(x => x.ContractId).Select(grouping => new
    {
         ContractId = grouping.Key,
         Total = grouping.Count(),
         FU = grouping.Count(x => x.Month == 1 && x.Value == 1),
         BR = grouping.Count(x => x.Month == 1 && x.Value == 2)
    }

我以为 EF 会输出这样的东西:

SELECT ContractId,
 Count(*) AS Total,
 COUNT(CASE WHEN [Month] = 1 AND [Value] = 1 THEN Value END) AS FU,
 COUNT(CASE WHEN [Month] = 1 AND [Value] = 2 THEN Value END) AS BR,
FROM ReportedFulfillments GROUP BY ContractId

我正在使用 EntityFramework 6.2.0

不久,GroupBy 分组结果集的 LINQ 条件 Count 没有得到很好的支持(您期望的 SQL 依赖于 SQL COUNT(expr)它排除了 NULL 并且没有 LINQ 等价物)。

但是等效的条件 Sum 得到了很好的支持和翻译,所以不用

FU = grouping.Count(x => x.Month == 1 && x.Value == 1),
BR = grouping.Count(x => x.Month == 1 && x.Value == 2)

使用

FU = grouping.Sum(x => x.Month == 1 && x.Value == 1 ? 1 : 0),
BR = grouping.Sum(x => x.Month == 1 && x.Value == 2 ? 1 : 0)