我有来自DB的位置数据。我的位置表中有父子关系。
我检索了记录。但是问题是如何填充视图模型。
例如
位置“美国”有孩子“加利福尼亚”和“纽约”,他们有自己的孩子。
我没有使用任何映射工具。
这是示例数据
Id ChildId Name
1 null US
2 null Canada
3 1 California
4 3 Los Angeles
5 2 Nova Scotia
6 5 Halifax
我不知道位置表的父子关系船的深度
我喜欢一些解决方案,所以当我写
List<LocVM> obj=context.locations.select(w=new LocVM{....,ChileLocation=w.ChildLoc}).tolist();
所以我的对象将具有所有位置和子位置
查看模型
Class LocVM{
public int Id{get;set;}
public int chileId {get;set;}
public LocVM ChildLocations {get;set;}
}
所以在上面的查询中
欢迎任何想法
答案 0 :(得分:0)
样本数据
IF OBJECT_ID('dbo.SampleData') IS NOT NULL
DROP TABLE SampleData
CREATE TABLE SampleData (ID int,ChildId INT,Name VARCHAR(20))
INSERT INTO SampleData
SELECT 1,null,'US' UNION ALL
SELECT 2,null,'Canada' UNION ALL
SELECT 3,1 ,'California' UNION ALL
SELECT 4,3 ,'Los Angeles' UNION ALL
SELECT 5,2 ,'Nova Scotia' UNION ALL
SELECT 6,5 ,'Halifax'
SELECT * FROM SampleData
此递归CTE可能能够满足您的要求。
;With Cte
AS
(
SELECT
ID
,ChildId
,CAST('/'+Name AS nvarchar(1000)) AS [Heirarchy]
FROM SampleData
WHERE ChildId IS NULL
UNION ALL
SELECT
e.ID
,e.ChildId
,CAST([Heirarchy]+'/'+e.Name AS nvarchar(1000)) AS [Heirarchy]
FROM SampleData e
INNER JOIN Cte t
ON t.ID = e.ChildId
)
SELECT ID
,RIGHT([Heirarchy],LEN([Heirarchy])-1) AS [CityHeirarchyPath]
FROM Cte
结果
ID CityHeirarchyPath
----------------------
1 US
2 Canada
5 Canada/Nova Scotia
6 Canada/Nova Scotia/Halifax
3 US/California
4 US/California/Los Angeles