1
我有群组的简单树结构和寻找一种方式来查询这样的事情作为一个Web应用程序:在任何级别创建递归Linq到实体查询? (像递归CTE)
- 顶级父
- 所有子组(孩子的儿童和等)
- 所有父组(我的父,母等的母公司)
我使用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 '%'[email protected]+'%')
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)
是的,这是它现在在我们的项目中的方式。 仍然为每个新案例创建新的表值函数或存储过程要慢得多,并且看起来不错(我宁愿不在数据库中保存任何逻辑,甚至查询逻辑)。 递归查询并不是非常罕见的情况,奇怪的是没有办法从实体创建这样的查询。 我真的希望有一些神奇的地方=) –