首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双组为Dictionary<int,Dictionary<string,List<Model>>>()

双组为Dictionary<int,Dictionary<string,List<Model>>>()
EN

Stack Overflow用户
提问于 2021-07-28 19:24:14
回答 1查看 86关注 0票数 3

我希望这可以由LINQ解决,而不需要任何额外的操作。

作为输入,我有一个模型列表:

代码语言:javascript
复制
public class Model 
{
  public int A { get; set; }
  public string B { get; set; }
  public int C { get; set; }
}

在结果上我应该

代码语言:javascript
复制
Dictionary<int, Dictionary<string, List<Model>>>();

我尝试了下一个例子:

代码语言:javascript
复制
 var r = (from t in list
                    group t by new {t.A, t.B}
                    into grp
                    select new
                    {
                        grp.Key.A,
                        grp.Key.B,
                        Q = grp
                    }).ToList();

但这并不是我所期望的,有什么办法解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-28 19:34:42

如果您有一个类型列表列表,则可以使用:

var list = new List<Model>();

var lookup = list.GroupBy(model => new { A = model.A, B = model.B }).GroupBy(grp => grp.Key.A).ToDictionary(grp => grp.Key, grp => grp.ToDictionary(subgrp => subgrp.Key.B, subgrp => subgrp.ToList()));

您将看到变量lookup具有您要寻找的类型。

它的工作原理:

通过第一个GroupBy,您将创建一个具有匿名密钥类型的IGrouping,该类型包含成员int A和字符串B。这是因为:

,因为匿名类型上的等于和GetHashCode方法是根据属性的相等和GetHashcode方法定义的,只有当它们的所有属性相等时,相同匿名类型的两个实例才是相等的。

这是我几年前问过的一个question的答案,如果你愿意的话,你可以检查它和@xanatos的优秀答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68566315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档