gpt4 book ai didi

c# - JSON 中的 LINQ 查询输出组和子组

转载 作者:太空宇宙 更新时间:2023-11-03 11:16:13 24 4
gpt4 key购买 nike

我有一个这样的表(组):

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 作为单独的元素输出没有问题,但我需要具有上述结构。

这是我目前正在使用的代码,在尝试了不同的东西之后,但仍然没有运气(这个版本只提供了两个级别):

    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);
}

最佳答案

我正在编写一些类似于@Hunter-974 推荐的代码。

public class Group
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public List<Group> Subgroups { get; set; }

public Group()
{
this.Subgroups = new List<Group>();
}
}

class Program
{
static void Main()
{
Group[] groups = new Group[]
{
new Group { Id = 1, Name = "Group 1", ParentId = null },
new Group { Id = 2, Name = "Group 2", ParentId = null },
new Group { Id = 3, Name = "SubGr 1-1", ParentId = 1 },
new Group { Id = 4, Name = "SubGr 1-2", ParentId = 1 },
new Group { Id = 5, Name = "SubGr 2-1", ParentId = 2 },
new Group { Id = 6, Name = "Group 3", ParentId = null },
new Group { Id = 7, Name = "SubGr 1-2-1", ParentId = 4 }
};

foreach (Group g in groups)
if (g.ParentId.HasValue)
groups.Single(group => group.Id == g.ParentId.Value).Subgroups.Add(g);

var rootgroups = groups.Where(g => g.ParentId == null);

JavaScriptSerializer js = new JavaScriptSerializer();
Console.WriteLine(js.Serialize(rootgroups));
}
}

关于c# - JSON 中的 LINQ 查询输出组和子组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12602952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com