LINQ中的GroupBy如何工作?

Con*_*per 2 c# linq linq-group

我原本有一本<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());
Run Code Online (Sandbox Code Playgroud)

例如,如果key["1234"]最初在其值列表中有6个项目,那么现在它可能有两个基于该分组的项目.我的问题和困惑是其他价值观会发生什么?(这四个)以及将为这组返回的这两个列表的值是什么?

Rei*_*ica 6

按工作分组,将您正在分组的任何内容放入与您在group by子句中指定的键匹配的项集合中.

如果您有以下数据:

Member name     Group code
Betty           123
Mildred         123
Charli          456
Mattilda        456
Run Code Online (Sandbox Code Playgroud)

以及以下查询

var query = from m in members
            group m by m.GroupCode into membersByGroupCode
            select membersByGroupCode;
Run Code Online (Sandbox Code Playgroud)

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
            };
Run Code Online (Sandbox Code Playgroud)

返回以下结果:

在此输入图像描述