EF Core Group By translation support on conditional sum

后端 未结 1 750
萌比男神i
萌比男神i 2021-01-12 04:33

I was really excited to hear that EF Core 2.1 will be supporting group by translations. I downloaded the preview and started testing it out but found that I am still not get

相关标签:
1条回答
  • 2021-01-12 05:04

    There is a way to do a conditional sum in this version of EF Core. Provided code is not going to be translated into desired SQL with GROUP BY but maybe some future version will support it this way. For now you can try something like this:

    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)
        });
    

    When you project your entity into an anonymous type and then group it and use conditional operator in an aggregate function it will be translated into SQL with GROUP BY and aggregates like:

    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]
    

    When you do not project it to an anonymous type so when there is the above Select function missing it will not be translated into SQL with GROUP BY. It looks like the query translator for this prerelease does not support it or it's a bug.

    0 讨论(0)
提交回复
热议问题