【发布时间】:2021-07-14 13:12:42
【问题描述】:
假设我有这样的结构(但A 和B 都有更多属性):
class C
{
List<A> A { get; set; }
}
class A
{
int Id { get; set; }
string Name { get; set; }
List<B> B { get; set; }
}
class B
{
int Id { get; set; }
string Name { get; set; }
int GroupId { get; set; }
}
我想按B.GroupId 分组,并且只保留每个组中具有相应GroupId 值的元素。
这是一个示例数据:
[
{
"Id": 1,
"Name": "A1",
"B": [
{
"Id": 1,
"Name": "B1",
"GroupId": 1
},
{
"Id": 2,
"Name": "B2",
"GroupId": 1
},
{
"Id": 3,
"Name": "B3",
"GroupId": 2
}
]
},
{
"Id": 2,
"Name": "A2",
"B": [
{
"Id": 4,
"Name": "B4",
"GroupId": 1
},
{
"Id": 5,
"Name": "B5",
"GroupId": 2
},
{
"Id": 6,
"Name": "B6",
"GroupId": 3
}
]
}
]
作为一个决心,我希望有 3 个组:
Group 1:
[
{
"Id": 1,
"Name": "A1",
"B": [
{
"Id": 1,
"Name": "B1",
"GroupId": 1
},
{
"Id": 2,
"Name": "B2",
"GroupId": 1
}
]
},
{
"Id": 2,
"Name": "A2",
"B": [
{
"Id": 4,
"Name": "B4",
"GroupId": 1
}
]
}
]
Group 2:
[
{
"Id": 1,
"Name": "A1",
"B": [
{
"Id": 3,
"Name": "B3",
"GroupId": 2
}
]
},
{
"Id": 2,
"Name": "A2",
"B": [
{
"Id": 5,
"Name": "B5",
"GroupId": 2
}
]
}
]
Group 3:
[
{
"Id": 2,
"Name": "A2",
"B": [
{
"Id": 6,
"Name": "B6",
"GroupId": 3
}
]
}
]
我发现我可以像这样按B.GroupId 分组:
from a in c
from b in a.B
group a by b.GroupId
但是我如何摆脱那些GroupId 不在相应组中的元素呢?我尝试在foreach 循环中删除它们,但这会将它们从所有组中删除,而不仅仅是一个。
【问题讨论】: