【问题标题】:Group dictionary by multiple properties of key通过键的多个属性对字典进行分组
【发布时间】:2018-10-25 06:35:03
【问题描述】:

我有以下代码,它按其元素的三个属性对列表进行分组并返回列表列表:

List<Employee> data;
var groups = data.GroupBy(x => new { x.Company, x.Position, x.Age })
                 .Select(grp => grp.ToList())
                 .ToList();

无法理解更改此代码以使用字典:

Dictionary<Employee, Report> data;

我需要创建一个按字典键的这三个属性分组的字典列表。

【问题讨论】:

  • 如果从字典中获取 list 并做同样的事情呢? f.e data.Keys.GroupBy(x => new { x.Company, x.Position, x.Age }) .Select(grp => grp.ToList()) .ToList();
  • @Z.R.T.回答它
  • @Z.R.T.不幸的是,只对键进行分组我们会丢失值。此代码返回 List>。它不会为员工保留报告。
  • 什么是Report?您应该提供Employee 类的定义。

标签: c# linq dictionary grouping


【解决方案1】:

您至少有两种选择:

首先:对字典的键属性使用分组,然后将字典的值投影到组:

    Dictionary<Employee, Report> data;
    var groups = data
                 .GroupBy(x => new { x.Key.Company, x.Key.Position, x.Key.Age }, pair => pair.Value)
                 .Select(grp => grp.ToList())
                 .ToList();

第二:作为@Z.R.T.说,您只能先投影字典的值,然后再投影组:

    Dictionary<Employee, Report> data;
    var groups = data
                 .Select(pair => pair.Key)
                 .GroupBy(x => new { x.Company, x.Position, x.Age }, pair => pair.Value)
                 .Select(grp => grp.ToList())
                 .ToList();

UPD

但是,如果您需要保留关系 Employee -> Report,您可以按其 Key 分组:

    Dictionary<Employee, Report> data;
    List<List<KeyValuePair<Employee , Report>>> groups = data
                 .GroupBy(x => new { x.Key.Company, x.Key.Position, x.Key.Age })
                 .Select(grp => grp.ToList())
                 .ToList();

【讨论】:

  • 第三个变种正是我所需要的。谢谢!
猜你喜欢
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 2015-08-05
  • 2018-02-20
  • 2015-11-04
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多