-1

我有一个表格格式

Id (int)
ParentId (int)

我需要查询出所有彼此相关的行,所以 ParentId = Id 但嵌套了多次

我有点坚持如何解决这个问题,我可能会恢复到存储过程,但我真的很想在纯 linq to sql 中尝试这个。

4

1 回答 1

3

我认为你有两个选择:

  • 您必须显式获取父母,这会导致对 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 中进行递归自联接的最简单方法是什么?.

于 2013-01-24T12:06:12.633 回答