使用 c# --> asp.net web api 在 json 中获取分层输出
Posted
技术标签:
【中文标题】使用 c# --> asp.net web api 在 json 中获取分层输出【英文标题】:get hierarchical output in json using c# --> asp.net web api 【发布时间】:2021-11-30 20:50:44 【问题描述】:我想使用 C#(ASP.NET Web Api) 在 JSON 输出中创建员工和经理的层次结构树。我使用了 EntityFramework。
我的获取 api 代码是 -
[Route("empLevel/id")]
public IActionResult GetEmpHierarchy(int id)
try
if (id == 0)
return NotFound();
var query_hierarchy = entity.EmployeeHierarchies.FromSqlInterpolated($"EXECUTE dbo.FindHierarchy id").ToList();
return Ok(query_hierarchy);
catch (Exception ex)
Console.WriteLine(ex.StackTrace);
return NotFound();
EmployeeHierarchy 类的代码是-
public class EmployeeHierarchy
public int Id get; set;
public int? MngId get; set;
public string Path get; set;
public string Name get; set;
public string FullPath get; set;
public int Level get; set;
public double Grade get; set;
我在从数据库获取输出的过程中使用了 CTE-
ALTER PROCEDURE [dbo].[FindHierarchy]
@empId int = null
AS
BEGIN
with cte as(
select Id, MngId, CAST('' AS VARCHAR(40)) ManagerName, Path = cast('' as varchar(40)),Name, Level = 0,Grade
from Employee
where MngId is null
union all
select EmpId = e.Id, ParentId = e.MngId,
CAST(cte.Name AS VARCHAR(40)) ManagerName,
Path = cast(concat(cte.Path, cte.Name, ' -› ') as varchar(40)),
Name = e.Name,
Level = cte.Level + 1,
Grade = e.Grade
from
Employee e
inner join cte on cte.Id = e.MngId
)
select
Id ,
MngId ,
ManagerName,
Path ,
Name ,
FullPath = Path + Name,
Level, Grade
from cte where ID=@empId
order by FullPath ;
END
目前我的输出如下:
[
"id":2,
"mngId":3,
"name":"Blake",
"fullPath":"Diana › Chelsa › Blake",
"level":2,
"grade":3.2
]
我想显示为-
[
"id":2,
"mngId":3,
"name":"Diana",
"level":2,
"grade":5.2[
"id":2,
"mngId":3,
"name":"Chelsa",
"level":2,
"grade":5.1[
"id":2,
"mngId":3,
"name":"Diana",
"level":2,
"grade":3.2[]
]
]
]
我是 asp.net web api 的新手,请为我的查询建议一些代码。谢谢!!
【问题讨论】:
我需要查看实体 EmployeeHierarchies 以向您发送适当的解决方案 @Almaran 我已经添加了代码和数据库代码!! 【参考方案1】:您的 EmployeeHierarchy 应该如下所示
public class EmployeeHierarchy
public int Id get; set;
public int? MngId get; set;
public string Path get; set;
public string Name get; set;
public string FullPath get; set;
public int Level get; set;
public double Grade get; set;
public EmployeeHierarchy ChildEmployee get; set;
这是我能看到的唯一方式。 您也必须编辑您的 SQL 以匹配此模型。
【讨论】:
以上是关于使用 c# --> asp.net web api 在 json 中获取分层输出的主要内容,如果未能解决你的问题,请参考以下文章