C# Linq:group by+;计数一列
我在SQL中有这个查询C# Linq:group by+;计数一列,c#,sql,linq,C#,Sql,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
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
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
context.MyTable
.GroupBy(x => new { x.FileName, x.UploadDate, x.Status })
.Select(x => new { x.Key.FileName, x.Key.UploadDate, x.Key.Status });
现在我想要相同的查询,但是需要一个额外的列,其中包含“Status”列的计数
我通过这个查询在SQL中实现了这一点
select FileName, UploadDate, Status, count(Status) as 'StatusCount'
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
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?我已经尝试了好几次不同的解决方案,但都没有成功。有人能帮我吗?如果你真的是指伯爵:
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) });
您只需在
Select
方法中的每个i分组
对象上调用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()
});
count(status)
也可以是count(*)
<代码>状态与组中的任何其他字段相比,此处的计数没有更多意义。