我最初有<string, List<ProviderSummary>>
字典rowsDictionary
现在,对于该词典的每个键,我按照以下标准对其值列表进行分组:
Dictionary<string, List<ProviderSummary>> providerGroups = rowsDictionary.ToDictionary(
x => x.Key,
v => v.Value.GroupBy(x => new { x.GroupID, x.GroupFin, x.ZipCode })
.Select(x => x.First())
.ToList());
因此,例如,如果key["1234"]
最初在其值列表中有6个项目,那么现在它可能有两个基于该分组的项目。我的问题和困惑是其他价值观会发生什么? (这四个)以及将为这组返回的这两个列表的值是什么?
答案 0 :(得分:6)
按工作分组,将您正在分组的任何内容放入与您在group by子句中指定的键匹配的项目集合中。
如果您有以下数据:
Member name Group code
Betty 123
Mildred 123
Charli 456
Mattilda 456
以下查询
var query = from m in members
group m by m.GroupCode into membersByGroupCode
select membersByGroupCode;
group by将返回以下结果:
您通常不希望直接选择分组。如果我们只想要组代码和成员名称而不需要所有其他多余的数据呢?
我们只需要执行select来获取我们之后的数据:
var query = from m in members
group m by m.GroupCode into membersByGroupCode
let memberNames = from m2 in membersByGroupCode
select m2.Name
select new
{
GroupCode = membersByGroupCode.Key,
MemberNames = memberNames
};
返回以下结果:
答案 1 :(得分:3)
将为该组返回的列表中包含哪些值?
每组的第一个,因为你这样做:
.Select(x => x.First())
其余值会发生什么变化?
它们不会被投射到目标字典中。
答案 2 :(得分:3)
您的LINQ group by query采用原始列表,对其执行其他分组,然后根据该分组修剪列表。
考虑单个列表包含这些项目的情况:
GroupID GroupFin ZipCode Name
------- -------- ------- ----
1 1 94111 A
1 1 94111 B
1 1 94111 C
1 1 94111 D
1 2 94110 E
1 2 94110 F
分组将从这六个列表中分成两组:
GroupID=1 GroupFin=1 ZipCode=94111
GroupID=1 GroupFin=2 ZipCode=94110
第一组将包含提供者A,B,C和D;第二组将包含E和F.
您的查询接下来要做的就是应用First
。此操作从组中选择初始项目;在这种情况下,它将是A和E.其余项目将被忽略。