我有一个简单的用户组树结构的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)
答案 0 :(得分:1)
否则您无法在ESQL或Linq-to-entities中创建此类递归查询。
您可以直接使用EF或ADO.NET调用存储过程,或者如果您使用的是.NET 4.5,并且如果您使用的是EDMX,则可以将查询包装在表值函数中,将函数导入EDMX并将其用于Linq-to-entities查询。