[英]C# datatable Group by count and distinct
我有一个数据表,看起来像图片中的那个。
使用下面的代码,我试图计算每个项目中每个客户端 ID 有多少个单元。 我的问题是我似乎无法排除重复的单位。
var projectsGroup = dt.AsEnumerable().GroupBy(g => g.Field<string>("Project"));
foreach (var projectGroup in projectsGroup)
{
var clientGroups = dt.AsEnumerable().GroupBy(g => g.Field<string>("ClientId"));
foreach (var clientGroup in clientGroups)
{
var test = dt.AsEnumerable()
.Where(r => r.Field<string>("ClientId") == clientGroup.Key && r.Field<string>("Project") == projectGroup.Key)
.Select(r => r.Field<string>("Project"));
// Console.WriteLine(test.FirstOrDefault() + " " + test.Count());
}
}
所以我的问题是,如何将这些排除在计数之外?
尝试这样的事情:
var projectsGroups = dt.AsEnumerable()
.GroupBy(r => r.Field<string>("Project"))
.Select(pg => new {
Project = pg.Key,
Clients = pg.GroupBy(r => r.Field<string>("ClientId"))
.Select(cg => new {
ClientId = cg.Key,
UnitCount = cg.Select(r => r.Field<string>("Unit"))
.Distinct()
.Count()
})
})
.ToList();
foreach (var pg in projectsGroups) {
foreach (var client in pg.Clients) {
Console.WriteLine($"In Project {pg.Project}, Client {client.ClientId} has {client.UnitCount} unit{(client.UnitCount == 1 ? "" : "s")}");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.