rlc*_*ews 14 linq entity-framework linq-to-sql
我有一个数据集表,其中包含多行数据,如下所示
ItemId Code StatusId
-------------------- ---------------------------------------------
62224 NC0860000 8
62225 NC0860000 8
62226 NC0860000 8
62227 NC0860200 5
62228 NC0860000 5
62229 NC0860000 5
62230 NC0860000 5
Run Code Online (Sandbox Code Playgroud)
我想要完成的是输出结果
NC0860000 8 3 (code, status, count)
NC0860000 5 3
Run Code Online (Sandbox Code Playgroud)
我不完全理解分组在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();
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何按代码分组,然后按StatusId分组,然后按状态生成总行数.
我很感激有关如何在查询中查看如何完成此操作或我正在做什么的任何建议.
Tim*_*ers 35
您可以按新的匿名类进行分组,如下所示:
// I created a Foo class to show this working
var fooList = new List<Foo> {
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();
Run Code Online (Sandbox Code Playgroud)
提供数据,这是输出:
AgencyCode Status Count
NC0860000 8 3
NC0860200 5 1
NC0860000 5 3
Run Code Online (Sandbox Code Playgroud)
我猜"NC0860200"是一个错误,但它在你的样本数据中,所以我把它包括在内.
| 归档时间: |
|
| 查看次数: |
33485 次 |
| 最近记录: |