1、EF Core中实现分组代码
var headerTask = cases
.Select(c => new
{
c.Flag,
c.YourKey
//其它属性
})
.GroupBy(c => c.YourKey, (k, g) => new CaseHeader
{
TotalCases = g.Count(),
//... 其他一些聚合函数
TotalFlagCases = g.Sum(b => a.Flag ? 1 : 0)
});
上面代码EF Core代码生成的SQL语名:
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]
2、Entity Framework中实现分组的代码
Consumers.GroupBy(c => c.Gender)
.Select(g => new { Key = g.Key, Count = g.Count() })
.ToDictionary(g => g.Key, g => g.Count)
上面代码对应生成的SQL语句:
SELECT COUNT(*) AS [Count], [t0].[Gender] AS [Key] FROM [Consumers] AS [t0] GROUP BY [t0].[Gender]
多列group by汇总求和:
var result = DataSummaryRepository.FindBy(x => x.UserID == argMemberNo && x.SummaryDate <= argEndDate && x.SummaryDate >= argStarDate).OrderByDescending(x => x.SummaryDate).GroupBy(x => new { x.SummaryDate, x.UserID }).Select(g => new
{
PV = g.Sum(x => x.PV),
UV = g.Sum(x => x.UV),
OrderQunantity = g.Sum(x => x.OrderQunantity),
OrderAmount = g.Sum(x => x.OrderAmount),
CommissionEstimate = g.Sum(x => x.CommissionEstimate),
AvaliableCommission = g.Sum(x => x.AvaliableCommission),
HistoryCommission = g.Sum(x => x.HistoryCommission),
SummaryDate = g.Key.SummaryDate,
UserID = g.Key.UserID
});