【问题标题】:Parent-child relation entity to MAP to view model映射到视图模型的父子关系实体
【发布时间】:2019-03-14 10:12:24
【问题描述】:

我有来自数据库的位置数据。我的位置表中有父子关系。

我检索了记录。但问题是如何填充我的视图模型。

例如

位置“美国”有孩子“加利福尼亚”和“纽约”,他们有自己的孩子。

我没有使用任何映射工具。

这是样本数据

    Id     ChildId   Name
    1      null      US
    2      null      Canada
    3      1         California
    4      3         Los Angeles
    5      2         Nova Scotia
    6      5         Halifax

而且我不知道我的 Location 表的父子关系的深度

我喜欢一些解决方案,所以当我写的时候

  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;}        

}

所以上面的查询

欢迎任何想法

【问题讨论】:

  • 这是一个非常模糊的问题。在这里显示样本数据和预期结果将有很大帮助,因为我们或多或少没有什么可做的。您听起来像是在描述单个表中的层次结构,并且 也许(?) 您想通过它进行查询?如果是这样,您是否考虑过使用 rCTE?当您改进您的问题以帮助我们了解您的需求时,请务必包含您的尝试。
  • @Larnu 我更新了我的问题
  • 您已经向我们提供了示例数据,但是我在评论中要求的其余部分呢?您的预期结果是什么?你在哪里尝试?
  • @Larnu 我让你检查我更新的问题变得更简单了

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


【解决方案1】:

样本数据

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

【讨论】:

  • 我在 LInq 查询中获取数据并且它很好。我想将我的实体映射到视图模型。那是我问的。 modelVMobj=contaxt.Locations.select(w=&gt;new LocVM{...what to do}).ToList()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 2022-10-06
相关资源
最近更新 更多