ユーザーグループの単純なツリー構造を持つ Web アプリケーションがあり、次のようなクエリを実行する方法を探しています。
- トップレベルの親
- 任意のレベルのすべての子グループ (childs の子など)
- すべての親グループ (私の親、親の親など)
私は MS SQL を使用しているので、必要な選択を DB に書き込んでストアド プロシージャとして保存することは大きな問題ではありません。
しかし、EntityToSql だけを使用してそのようなクエリを作成する方法はありますか?
私が使用する TSQL クエリの例を次に示します。
DECLARE @userGroupId uniqueidentifier
DECLARE @searchTerm nvarchar(20)
SET @userGroupId = '00000000-0000-0000-0000-000000000000'
Set @searchTerm = 'test'
;WITH n(lvl,id,ParentUserGroupId,FullName) AS (
SELECT 1,id,ParentUserGroupId,FullName FROM UserGroups where
id in (select UserGroupId
FROM Users WHERE login like '%'+@searchTerm+'%')
UNION ALL
SELECT n.lvl+1, nplus1.id,nplus1.ParentUserGroupId, nplus1.FullName
FROM UserGroups as nplus1,n WHERE n.ParentUserGroupId = nplus1.id
)
SELECT DIStinct id,FullName
FROM n where ParentUserGroupId = @userGroupId OR
((@userGroupId IS NULL OR @userGroupId = '00000000-0000-0000-0000-000000000000')
AND ParentUserGroupId IS NULL)