私はこのようなテーブルを持っています(グループ):
ID Name ParentID
1 Group 1 null
2 Group 2 null
3 SubGr 1-1 1
4 SubGr 1-2 1
5 SubGr 2-1 2
6 Group 3 null
7 SubGr 1-2-1 4
..... and so on
これを次のように JSON にシリアル化したい:
[{"id":1,
"name":"Group 1",
"children": [
{
"id":3,
"name":"SubGr 1-1",
"children":null
},{
"id":4,
"name":"SubGr 1-2",
"children": [
{
"id":7,
"name":"SubGr 1-2-1",
"children": null
}
]
}
]
},
{"id":2,
"name":"Group 2",
"children": [
{
"id":5,
"name":"SubGr 2-1",
"children":null
}
]
},
{"id":6,
"name": "Group 3",
"children": null
}
]
ご覧のとおり、無限のサブグループを持つことができます。
このようなクエリを LINQ で作成し、上記の例のように JSON で出力するにはどうすればよいですか?
ParentID を使用して、JSON を個別の要素として出力しても問題ありませんが、上記のような構造にする必要があります。
これは、さまざまなことを試した後、現在取り組んでいるコードですが、まだ運がありません (このバージョンでは 2 つのレベルしか提供されません)。
public ActionResult GetGroups()
{
var groupobjs = db.GroupObjs.ToList();
var items = groupobjs.Where(p => p.ParentID == null).Select(p => new
{
id = p.ID,
name = p.Name,
children = groupobjs.Where(c => c.ParentID == p.ID).Select(c => new {
id = c.ID,
name = c.Name
})
});
return Json(items, JsonRequestBehavior.AllowGet);
}