【问题标题】:Linq: group by + count for one columnLinq:按+计数为一列分组
【发布时间】:2020-04-10 18:20:54
【问题描述】:

我在 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?我尝试了多次不同的解决方案,但都没有成功。有人可以帮帮我吗?

【问题讨论】:

  • count(status) 也可以是 count(*)status 在这里的计数没有比组中的任何其他字段更多的意义。

标签: c# sql linq


【解决方案1】:

如果你真的是指计数:

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

【讨论】:

    【解决方案2】:

    您只需要在Select 方法中对每个IGrouping<> 对象调用Count 方法即可:

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

    【讨论】:

      猜你喜欢
      • 2014-07-08
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多