按类属性的值“分组”字典

时间:2016-05-19 02:04:31

标签: c# linq

我有类似的请求,如下面的链接

"Grouping" dictionary by value

但我想根据班级的属性进行分组。

public class myClass1
{
    public int id { get; set; }
    public string networkId { get; set; }
}

在下面的示例中,我想要一组networkId

        var obj1 = new myClass1() { id = 11, networkId = "asdf1" };
        var obj2 = new myClass1() { id = 22, networkId = "asdf2" };
        var obj3 = new myClass1() { id = 33, networkId = "asdf3" };
        var obj4 = new myClass1() { id = 44, networkId = "asdf1" };
        var obj5 = new myClass1() { id = 55, networkId = "asdf2" };
        var obj6 = new myClass1() { id = 66, networkId = "asdf1" };
        var obj7 = new myClass1() { id = 77, networkId = "asdf1" };

        var classDictionary = new Dictionary<int, myClass1>();
        classDictionary.Add(1, obj1);
        classDictionary.Add(2, obj2);
        classDictionary.Add(3, obj3);
        classDictionary.Add(4, obj4);
        classDictionary.Add(5, obj5);
        classDictionary.Add(6, obj6);
        classDictionary.Add(7, obj7);

        Dictionary<myClass1, List<int>> test2 =
                           classDictionary.GroupBy(r => r.Value.networkId)
                          //.ToDictionary(t => t.Key, t => t.Select(r => r.Value).ToList());

结果就像是一个字符串,其键值如下所示

"asdf1" -> List of obj1, obj4, obj6, obj7
"asdf2" -> List of obj2, obj5
"asdf3" -> List of obj3

任何帮助?

1 个答案:

答案 0 :(得分:3)

你非常接近。您只需将目标字典结构更新为以下内容:

Dictionary<string, List<myClass1>> test2 = classDictionary
    .GroupBy(r => r.Value.networkId)
    .ToDictionary(t => t.Key, t => t.Select(r => r.Value).ToList());

这会创建以下输出:

enter image description here

值得注意的是,这是var的一个很好的用例,而不是显式命名类型,因为它将为您确定输出类型。在尝试确定最终类型时,这通常很有用。