我使用這個 LINQ 代碼從 SQL DB 中選擇一個包含孩子及其父母的平面串列:
(from c in _context.Children
join cp in _context.ChildParents on c.Id equals cp.ChildId
join p in _context.Parents on cp.ParentId equals p.Id
select new ChildWithParentFlat()
{
ChildId = c.Id,
ChildName = c.Name,
ParentId = p.Id,
ParentName = p.Name
}
).ToList();
它以這種格式顯示一個串列:
[
{
"ChildId": 1,
"ParentId": 1,
"ChildName": "FirstChild",
"ParentName": "FirstParent"
},
{
"ChildId": 1,
"ParentId": 2,
"ChildName": "FirstChild",
"ParentName": "SecondParent"
},
{
"ChildId": 2,
"ParentId": 3,
"ChildName": "SecondChild",
"ParentName": "ThirdParent"
},
{
"ChildId": 2,
"ParentId": 4,
"ChildName": "SecondChild",
"ParentName": "FourthParent"
}
]
我想將此串列轉換為分層串列,以便每個物件都包含一個子物件及其父物件。像這樣的東西:
[
{
"ChildId": 1,
"ChildName": "FirstChild",
"Parents": [
{
"ParentId": 1,
"ParentName": "FirstParent"
},
{
"ParentId": 2,
"ParentName": "SecondParent"
}
]
},
{
"ChildId": 2,
"Parents": [
{
"ChildName": "SecondChild",
"ParentName": "ThirdParent",
},
{
"ParentId": 4,
"ParentName": "FourthParent"
}
]
},
]
做這個的最好方式是什么?
uj5u.com熱心網友回復:
我想將此串列轉換為分層串列
使用GroupBy:
var hyrarchical = flatList
.GroupBy(x => (x.ChildId, x.ChildName))
.Select(cg => (
ChildId: cg.Key.ChildId,
ChildName: cg.Key.ChildName,
Parents: cg.GroupBy(x => (x.ParentId, x.ParentName))
.Select(pg => (ParentId: pg.Key.ParentId, ParentName: pg.Key.ParentName)))
));
您可以ToList在需要的地方添加,也可以使用自定義類而不是這些元組,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/442858.html
上一篇:在多個值上相交兩個物件串列
下一篇:使用LINQ過濾
