我有以下代码,该代码按其元素的三个属性对列表进行分组并返回列表列表:
List<Employee> data;
var groups = data.GroupBy(x => new { x.Company, x.Position, x.Age })
.Select(grp => grp.ToList())
.ToList();
无法理解更改此代码以使用字典:
Dictionary<Employee, Report> data;
我需要创建按字典键的这三个属性分组的字典列表。
答案 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();