1

我有一个 web 应用程序,它具有简单的用户组树结构,并正在寻找一种查询以下内容的方法:

  • 顶级父母
  • 任何级别的所有子组(孩子的孩子等)
  • 所有家长组(我的家长、家长的家长等)

我正在使用 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 回答