【发布时间】:2019-09-27 00:37:48
【问题描述】:
我正在尝试从 ASP.NET webAPI 获得嵌套的分层 JSON 响应,其中定义了基于 SQL 表的平面模型。
我是 ASP.NET WebAPI 的新手。 我有一个 MVC ASP.NET 项目,其中定义了一个程序集模型类。每个程序集都可以是另一个程序集的子节点,理论上有无限子节点和 childrenOfchildren。
链接到 SQL 表的装配模型类定义如下:
Int Id
String Name
Int ParentId
我需要执行一个 Http GET 来检索父子层次结构。
现在我在程序集控制器类中有以下函数:
[Route("api/Assembly/GetTree/{id}")]
[HttpGet]
public IEnumerable<Assembly> GetTree(int id)
{
var assemblies = db.Assemblies.Where(x => x.ParentId == id || x.Id == id).ToList();
var child = assemblies.AsEnumerable().Union(db.Assemblies.AsEnumerable().Where(x => x.ParentId == id).SelectMany(y => GetParent(y.Id))).ToList();
return child;
}
问题(我认为)是“联合”返回给我一个扁平的 JSON 响应。
db.Assembies 是从 db 自动生成的 db 上下文模型类程序集的实例,定义如下:
public partial class Assembly
{
public Assembly(){}
public int Id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
}
预期的结果应该是这样的:
[
{
Id: '1',
Name: 'Assembly1',
ParentId: '0'
children: [
{
Id: '2',
Name: 'Assembly1.1',
ParentId: '1',
},
{
Id: '3',
Name: 'Assembly1.2',
ParentId: '1',
},
]
},
{
Id: '4',
Name: 'Assembly2',
ParentId: '0'
children: [
{
Id: '5',
Name: 'Assembly2.1',
ParentId: '4',
children: [
{
Id: '6',
Name: 'Assembly2.1.1',
ParentId: '5',
},
{
Id: '7',
Name: 'Assembly2.1.2',
ParentId: '5',
},
]
},
{
Id: '8',
Name: 'Assembly2.2',
ParentId: '4'
children: [
{
Id: '9',
Name: 'Assembly2.2.1',
ParentId: '8',
},
{
Id: '10',
Name: 'Assembly2.2.2',
ParentId: '8',
},
]
},
]
},
]
如何将程序集放在其他程序集中?
【问题讨论】:
-
不清楚你在问什么。在 SO 上,人们可以帮助解决明确的编程问题,你尝试了 A,得到了结果 B,但你期望的是 C。不是我想要的,去给我写代码吧。
-
db.Assemblies下有什么内容请发帖
标签: c# sql linq asp.net-web-api