c# - C# 中的嵌套 GroupBy
问题描述
有一个具有这种结构的对象:
public class GroupedObject
{
public int id { get; set; }
public string name { get; set; }
public int value { get; set; }
public string color { get; set; }
}
在这里,它按其属性之一分组,id
。
var myObj = someResponse
.Select(d => new GroupedObject
{
id = d.id,
name = d.name,
value = d.value,
color = d.color
})
.GroupBy(o => o.id)
.ToDictionary(a => a.Key, a => a.Select(o => o).ToList());
结构是:
id - id, name, value, color
id - id, name, value, color
id - id, name, value, color
我想要做的是将它再次分组name
,具有这样的嵌套结构:
id - name - id, name, value, color
- name - id, name, value, color
id - name - id, name, value, color
- name - id, name, value, color
- name - id, name, value, color
- name - id, name, value, color
id - name - id, name, value, color
- name - id, name, value, color
- name - id, name, value, color
尝试使用GroupBy
两次没有用。也不是通过对其进行转换ToList
和分组。
var myObj = someResponse
.Select(d => new GroupedObject
{
id = d.id,
name = d.name,
value = d.value,
color = d.color
})
.GroupBy(o => o.id).GroupBy(o => o.name)
.ToDictionary(a => a.Key, a => a.Select(o => o).ToList());
解决方案
你在正确的轨道上,但是这里是实现两个嵌套级别分组的 LINQ:
someResponse
.Select(d => new GroupedObject
{
id = d.id,
name = d.name,
value = d.value,
color = d.color
})
.GroupBy(o => o.id)
.ToDictionary(
a => a.Key,
a => a.GroupBy(o => o.name).ToDictionary(o => o.Key, o => o));
这将导致对象类型:Dictionary<int, Dictionary<string, IGrouping<string, GroupedObject>>>
考虑到这一点,最后IGrouping<string, GroupedObject>
一种类型可以更改/投影为不同的类型,在嵌套ToDictionary
调用中指定合适的 lamda:
例如将调用更改为ToDictionary(o => o.Key, o => o.ToList())
结果Dictionary<int, Dictionary<string, List<GroupedObject>>>
推荐阅读
- c++ - Arduino / C++:如何从变量和类变量中共享相同的值
- reactjs - 在 React 中记忆所有内容是一种不好的做法吗?
- python - 列出来自 Firebase 身份验证的所有用户
- javascript - 如何在另一个样式组件中定位样式组件?
- typescript - 为什么我的类型没有暴露在我的 npm 包中?
- sql - 查询输出为空时在字段中显示零值
- python - 单击时显示 Treeview 数据并在单击时隐藏 - Tkinter
- java - Joda Time:计算一个月内下一个完整间隔的时间
- html - 一页使用两个样式文件和冲突问题
- python-3.x - scipy.integrate 错误:只有大小为 1 的数组可以转换为 Python 标量