1

ユーザーグループの単純なツリー構造を持つ 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)
4

1 に答える 1

1

いいえ、ESQL または Linq-to-entities でそのような再帰クエリを作成することはできません。

ストアド プロシージャは EF または ADO.NET で直接呼び出すことができます。または、.NET 4.5 を使用していて EDMX を使用している場合は、クエリをテーブル値関数でラップし、関数を EDMX にインポートして Linq-to で使用できます。 -エンティティ クエリ。

于 2012-11-20T11:45:14.087 に答える