MAP的父子关系实体以查看模型

时间:2019-03-14 10:12:25

标签: c# sql-server linq model-view-controller parent-child

我有来自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;}        

}

所以在上面的查询中

欢迎任何想法

1 个答案:

答案 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