C# 将列表映射到具有最大对象属性值的字典

C# 将列表映射到具有最大对象属性值的字典,c#,dictionary,mapping,ienumerable,C#,Dictionary,Mapping,Ienumerable,我有一张单子。PersonTypeAccess是一个具有两个属性的对象:PersonType和AccessType。这两个都是枚举 如果我尝试将其可视化,列表可能如下所示: { { PersonType = 0, AccessType = 2}, { PersonType = 5, AccessType = 0}, { PersonType = 2, AccessType = 1} }, { { PersonType = 6, AccessType = 1}, { PersonType = 3,

我有一张单子。PersonTypeAccess是一个具有两个属性的对象:PersonType和AccessType。这两个都是枚举

如果我尝试将其可视化,列表可能如下所示:

{
{ PersonType = 0, AccessType = 2},
{ PersonType = 5, AccessType = 0},
{ PersonType = 2, AccessType = 1}
},
{
{ PersonType = 6, AccessType = 1},
{ PersonType = 3, AccessType = 0}
},
{
{ PersonType = 3, AccessType = 1},
{ PersonType = 5, AccessType = 0},
{ PersonType = 8, AccessType = -1},
{ PersonType = 0, AccessType = 1}
}
我需要创建一个字典,每个PersonType只包含一次,并结合列表中的最高AccessType值

我上面的例子是:

{
PersonType 0 -> AccessType 2,
PersonType 8 -> AccessType -1,
PersonType 5 -> AccessType 0,
PersonType 3 -> AccessType 1,
PersonType 6 -> AccessType 1,
PersonType 2 -> AccessType 1
}
我该怎么做呢?

你可以用它来平展列表。然后使用to group by PersonType,在结果选择器中,使用单个元素AccessType强制转换为int,并选择包含每个PersonType及其最大AccessType的匿名类型。最后,您可以使用将其投影到字典


到目前为止你试过什么?你遇到了什么问题?
var dict = list
     .SelectMany(c => c)
     .GroupBy(
        c => c.PersonType, 
        c => (int) c.AccessType,
        (key, els) => new { 
           PersonType = key, 
           AccessType = (AccessType)els.Max()
        })
     .ToDictionary(c => c.PersonType, c => c.AcessType);