Родитель-дочерний объект отношения к MAP для просмотра модели - PullRequest
0 голосов
/ 14 марта 2019

У меня есть данные о местоположении, поступающие из БД. В моей таблице Локаций есть Отношения между родителями и детьми.

Я восстановил записи. Но проблема в том, как я могу заполнить свою модель представления.

Например

В местоположении "США" есть ребенок "Калифорния" и "Нью-Йорк", и у них есть собственный ребенок.

Я не использую никаких картографических инструментов.

Вот пример данных

    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 голосов
/ 14 марта 2019

Пример данных

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
...