通过键的多个属性对字典进行分组

时间:2018-10-25 06:35:04

标签: c# linq dictionary grouping

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

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

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

Dictionary<Employee, Report> data;

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

1 个答案:

答案 0 :(得分:2)

您至少有2种方法可以做到这一点:

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

    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

但是,如果您需要保留“雇员”->“报告”关系,则可以按其键进行分组:

    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();