【问题标题】:“Grouping” dictionary by value of class property按类属性的值“分组”字典
【发布时间】:2016-05-19 10:20:43
【问题描述】:

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

"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

有什么帮助吗?

【问题讨论】:

  • 这不行吗? .ToDictionary(t =&gt; t.Key, t =&gt; t.Select(r =&gt; r.Value).ToList());
  • 不,有些编译错误
  • 哦,应该是var test2 = (或Dictionary&lt;string, List&lt;myClass1&gt;&gt; test2 =),因为您需要myClass1 的列表,而不是int。此外,在未来,请包含错误消息,而不仅仅是编译错误 - 这没有多大帮助:)
  • 是的,我应该从一开始就包含它。看看下面的答案,如果我像你提到的那样把它变成 var test2,这个问题就不会弹出。谢谢您的帮助!我应该从一开始就这样做......

标签: c# linq


【解决方案1】:

你们很亲密。您只需将目标字典结构更新为以下内容:

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

这将创建以下输出:

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

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多