LINQ中的GroupBy如何工作?
我最初有一个名为rowsDictionary
的<string, List>
rowsDictionary
现在,对于该字典的每个键,我按照以下标准对其值列表进行分组:
Dictionary<string, List> 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个项目,那么现在它可能有两个基于该分组的项目。 我的问题和困惑是其他价值观会发生什么? (这四个)以及将为这组返回的这两个列表的值是什么?
通过将您正在分组的任何内容分组并将其放入与您在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 };
返回以下结果:
哪些值将进入为组返回的列表?
每组的第一个,因为你这样做:
.Select(x => x.First())
其余值会发生什么变化?
它们不会被投射到目标词典中。
您的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.其余项目将被忽略。
- 提供软件设置的最佳方式?
- 如何刷新绑定源
- 从DateTime中删除时间部分
- 在Repeater或GridView中第一次单击时,ItemCommand不会触发
- 阻止Winforms Designer为inheritance的控件生成属性值
- 带有公钥的RSA C#加密用于PHP openssl_private_decrypt():Chilkat,BouncyCastle,RSACryptoServiceProvider
- 如何从html中提取文本
- angularjs:如何从隐藏输入类型的asp .net页面获取值?
- 如何获取服务器(不是网络服务器)的IP地址,而是在Xamarin.Forms中的wifi模块上创建的TCP服务器