我正在尝试编写一个 CTE 递归查询来构建具有“marketGroupID”(该元素的 ID)和“parentGroupID”(元素的父 ID)的平面表的树关系。每个 'marketGroup' 可以有任意数量的子 'marketGroups' 等等。
这是我的工作查询(在 Sql Server Management 中测试):
With cte As
(SELECT [marketGroupID]
,[parentGroupID]
,[marketGroupName]
,[description]
,[iconID]
,[hasTypes]
, 0 As Level
FROM [Eve_Retribution_1.0.7].[dbo].[invMarketGroups]
WHERE [parentGroupID] IS NULL
UNION All
Select mg.marketGroupID
,mg.parentGroupID
,mg.marketGroupName
,mg.description
,mg.iconID
,mg.hasTypes
,c.Level + 1 As Level
FROM [Eve_Retribution_1.0.7].dbo.invMarketGroups mg
Inner Join cte c On mg.parentGroupID = c.marketGroupID
WHERE mg.marketGroupID <> mg.parentGroupID
)
SELECT marketGroupID
,parentGroupID
,marketGroupName
,description
,iconID
,hasTypes
, Level
FROM cte
此查询以正确的顺序正确列出了元素,并且 Level 参数旨在用于从元素构建树。
将其翻译成 C# 是我遇到的问题。我已经集成了这个数据库,并且所有相应的表都从我的数据库自动构建到我的代码中。我尝试使用 C# 调用此查询,如下所示:
EveOnlineClassesDataContext context = new EveOnlineClassesDataContext();
IEnumerable<invMarketGroup> results = context.ExecuteQuery<invMarketGroup>
(@"**ABOVE QUERY**");
其中“invMarketGroup”类是由 O/R 设计器自动创建的类。我的问题是我无法访问每个“marketGroup”的 Level 参数,因为它不是表本身的一部分,并且在提供的类中没有元素。
我想从查询中检索实际的“invMarketGroup”类对象和对应于每个对象的级别,以便我可以在内存中构建一棵树来表示这个结构。我该怎么做呢?
谢谢