使用列表和字典 c# 对象到元组
object to Tuple with list and dictionary c#
{
"data": [
{
"id": 10,
"title": "Administration",
"active": true,
"type": {
"id": 2,
"name": "Manager"
}
},
{
"id": 207,
"title": "MCO - Exact Match 1",
"active": true,
"type": {
"id": 128,
"name": "Group"
}
},
{
"id": 1201,
"title": "Regression",
"active": false,
"type": {
"id": 2,
"name": "Manager"
}
}
]
}
我正在尝试使用 linq 创建以下格式的元组。不确定如何从 group/aggregate 开始。任何帮助表示赞赏。我浏览了几个线程,但找不到与此类似的内容。
var tuple = new List<Tuple<int, List<Dictionary<int,bool>>>();
2 10, true
1201, false
128 207, true
这是一个完整的工作代码:
var o = new {
data = new [] {
new {
id = 10,
title = "Administration",
active = true,
type = new {
id = 2,
name = "Manager"
}
},
new {
id = 207,
title = "MCO - Exact Match 1",
active = true,
type = new {
id = 128,
name = "Group"
}
},
new {
id = 1201,
title = "Regression",
active = false,
type = new {
id = 2,
name = "Manager"
}
}
}
};
var result = o.data.GroupBy(
item => item.type.id, // the group key
item => new Dictionary<int, bool>() {{ item.id, item.active }}, // the transformed elements in the group
(id, items) => new Tuple<int, List<Dictionary<int, bool>>>(id, items.ToList()) // transformation of grouping result to the final desired format
).ToList();
// check correctness
foreach (var entry in result) {
Console.Write(entry.Item1);
foreach (var dict in entry.Item2) {
foreach (var kvp in dict)
Console.WriteLine("\t\t" + kvp.Key + "\t" + kvp.Value);
}
}
这就是它的工作原理:
o
是数据模型,使用匿名类型表示。如果您已经拥有强类型模型,您显然可以在这里使用它;
- 在
o
我们应用了 GroupBy 的四参数版本,在 official docs from Microsoft 中有详细描述。基本上:
- 第一个 lambda 表达式选择组键;
- 第二个 lambda 定义属于每个组的元素;
- 第三个lambda将each(组键,组元素枚举)转换成
Tuple<int, List<Dictionary<int, bool>>>
格式;
- 最后我们调用 ToList() 来计算结果并将其存储为元组列表。
- 最后一部分打印结果(没有花太多时间美化它,但它完成了验证代码的工作)。
{
"data": [
{
"id": 10,
"title": "Administration",
"active": true,
"type": {
"id": 2,
"name": "Manager"
}
},
{
"id": 207,
"title": "MCO - Exact Match 1",
"active": true,
"type": {
"id": 128,
"name": "Group"
}
},
{
"id": 1201,
"title": "Regression",
"active": false,
"type": {
"id": 2,
"name": "Manager"
}
}
]
}
我正在尝试使用 linq 创建以下格式的元组。不确定如何从 group/aggregate 开始。任何帮助表示赞赏。我浏览了几个线程,但找不到与此类似的内容。
var tuple = new List<Tuple<int, List<Dictionary<int,bool>>>();
2 10, true
1201, false
128 207, true
这是一个完整的工作代码:
var o = new {
data = new [] {
new {
id = 10,
title = "Administration",
active = true,
type = new {
id = 2,
name = "Manager"
}
},
new {
id = 207,
title = "MCO - Exact Match 1",
active = true,
type = new {
id = 128,
name = "Group"
}
},
new {
id = 1201,
title = "Regression",
active = false,
type = new {
id = 2,
name = "Manager"
}
}
}
};
var result = o.data.GroupBy(
item => item.type.id, // the group key
item => new Dictionary<int, bool>() {{ item.id, item.active }}, // the transformed elements in the group
(id, items) => new Tuple<int, List<Dictionary<int, bool>>>(id, items.ToList()) // transformation of grouping result to the final desired format
).ToList();
// check correctness
foreach (var entry in result) {
Console.Write(entry.Item1);
foreach (var dict in entry.Item2) {
foreach (var kvp in dict)
Console.WriteLine("\t\t" + kvp.Key + "\t" + kvp.Value);
}
}
这就是它的工作原理:
o
是数据模型,使用匿名类型表示。如果您已经拥有强类型模型,您显然可以在这里使用它;- 在
o
我们应用了 GroupBy 的四参数版本,在 official docs from Microsoft 中有详细描述。基本上:- 第一个 lambda 表达式选择组键;
- 第二个 lambda 定义属于每个组的元素;
- 第三个lambda将each(组键,组元素枚举)转换成
Tuple<int, List<Dictionary<int, bool>>>
格式; - 最后我们调用 ToList() 来计算结果并将其存储为元组列表。
- 最后一部分打印结果(没有花太多时间美化它,但它完成了验证代码的工作)。