我有一个表格格式
Id (int)
ParentId (int)
我需要查询出所有彼此相关的行,所以 ParentId = Id 但嵌套了多次
我有点坚持如何解决这个问题,我可能会恢复到存储过程,但我真的很想在纯 linq to sql 中尝试这个。
我有一个表格格式
Id (int)
ParentId (int)
我需要查询出所有彼此相关的行,所以 ParentId = Id 但嵌套了多次
我有点坚持如何解决这个问题,我可能会恢复到存储过程,但我真的很想在纯 linq to sql 中尝试这个。
我认为你有两个选择:
您必须显式获取父母,这会导致对 db 的许多单独调用。我认为 L2S 或 L2E 不支持这种架构(从 db 调用递归地获取自引用数据)。
在这些情况下,我倾向于使用我的数据库的本机功能(在这种情况下:CTE)。您可以使用自定义 sql 查询,也可以使用db.ExecuteQuery<ReturnType>
. 如果您使用的是 sql server 2005+,则可以使用以下语法:
var allGroups =
db.ExecuteQuery(
@"WITH n(Id, ParentId) AS
(SELECT Id, ParentId
FROM MyTable
WHERE Id = {0}
UNION ALL
SELECT nplus1.Id, nplus1.ParentId
FROM MyTable as nplus1, n
WHERE n.ParentId = nplus1.Id)
SELECT Id, ParentId FROM n",
firstChildId).ToList();
这样,您就可以在一次调用中获取所有实体。查看如何在 SQL Server 中进行上层递归自联接?在 SQL Server 中进行递归自联接的最简单方法是什么?.