首页 > 解决方案 > Linq:按+计数为一列分组

问题描述

我在 SQL 中有这个查询

     select FileName, UploadDate, Status 
     from MyTable group by FileName, UploadDate, Status

这给了我正确的输出

FileName    UploadDate              Status
fuel 1.xls  2020-04-10 17:43:04.857 1
fuel 1.xls  2020-04-10 17:43:04.857 4
fuel 2.xls  2020-04-10 17:43:17.193 4

我可以将此查询转换为 LINQ

context.MyTable
                .GroupBy(x => new { x.FileName, x.UploadDate, x.Status })
                .Select(x => new { x.Key.FileName, x.Key.UploadDate, x.Key.Status });

现在我想要相同的查询,但有一个额外的列,其中包含“状态”列的计数

我用这个查询在 SQL 中完成这个

select FileName, UploadDate, Status, count(Status) as 'StatusCount' 
from MyTable group by FileName, UploadDate, Status

这给了我正确的输出

FileName    UploadDate             Status   StatusCount
fuel 1.xls  2020-04-10 17:43:04.857 1       19
fuel 1.xls  2020-04-10 17:43:04.857 4       1
fuel 2.xls  2020-04-10 17:43:17.193 4       20

如何将这个额外的“列数”翻译成 LINQ?我尝试了几次不同的解决方案,但都没有成功。有人能帮助我吗?

标签: c#sqllinq

解决方案


如果你真的是指计数:

context.MyTable
   .GroupBy(x => new { x.FileName, x.UploadDate, x.Status })
   .Select(x => new { x.Key.FileName, x.Key.UploadDate, x.Key.Status,
                      Count = x.Count() });

如果您的意思是总和:

context.MyTable
   .GroupBy(x => new { x.FileName, x.UploadDate, x.Status })
   .Select(x => new { x.Key.FileName, x.Key.UploadDate, x.Key.Status,
                      Sum = x.Sum(e => e.Status) });

推荐阅读