「marketGroupID」(その要素の ID) と「parentGroupID」(要素の親 ID) を持つフラット テーブルのツリー関係を構築する CTE 再帰クエリを作成しようとしています。各「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」のレベルパラメーターにアクセスできなくなることです。
実際の「invMarketGroup」クラス オブジェクトとそれぞれに対応するレベルをクエリから取得して、この構造を表すメモリ内のツリーを構築できるようにします。どうすればこれを行うことができますか?
ありがとう