如何使用LINQ按多列分组
如何使用LINQ按多列分组
这个问题的答案已经在这里了:
我有一个包含多行数据的数据库表,如下所示:
ItemId Code StatusId -------------------- --------------------------------------------- 62224 NC0860000 8 62225 NC0860000 8 62226 NC0860000 8 62227 NC0860200 5 62228 NC0860000 5 62229 NC0860000 5 62230 NC0860000 5
我想实现的是一个输出结果,如下:
NC0860000 8 3 (code, status, count) NC0860000 5 3
我不完全理解 EF 中的分组是如何工作的。我可以使用以下查询获取单个组的键和计数:
var results = (from ssi in ctx.StageSubmitItems join s in ctx.StageSubmissions on ssi.SubmissionId equals s.SubmissionId where s.ContributorCode == contributorId group ssi.SubmitItemId by ssi.AgencyCode into g select new {AgencyCode = g.Key, Count = g.Count() }).ToList();
但我无法弄清楚如何按代码和状态 ID 分组,然后按状态的总行数产生一个计数。
我会感激任何关于如何完成这个任务或者我在查询中做错了什么的建议。
admin 更改状态以发布 2023年5月22日
你可以按以下方式将数据分组成新的匿名类:
// I created a Foo class to show this working var fooList = new List{ new Foo { ItemId = 62224, Code = "NC0860000", StatusId = 8 }, new Foo { ItemId = 62225, Code = "NC0860000", StatusId = 8 }, new Foo { ItemId = 62226, Code = "NC0860000", StatusId = 8 }, new Foo { ItemId = 62227, Code = "NC0860200", StatusId = 5 }, new Foo { ItemId = 62228, Code = "NC0860000", StatusId = 5 }, new Foo { ItemId = 62229, Code = "NC0860000", StatusId = 5 }, new Foo { ItemId = 62230, Code = "NC0860000", StatusId = 5 }, }; var results = (from ssi in fooList // here I choose each field I want to group by group ssi by new { ssi.Code, ssi.StatusId } into g select new { AgencyCode = g.Key.Code, Status = g.Key.StatusId, Count = g.Count() } ).ToList(); // LINQPad output command results.Dump();
根据提供的数据,以下是输出结果:
AgencyCode Status Count NC0860000 8 3 NC0860200 5 1 NC0860000 5 3
我猜“NC0860200”是一个错误,但它在你的示例数据中,所以我包含了它。