将递归转换为LINQ的SQL查询

时间:2015-05-21 08:45:02

标签: c# sql linq recursion

我遇到了一个必须将存储过程转换为LINQ查询的任务。

模特:

  • AccountSet:包含“ AccountId ”,“ ParentAccountId ”列的帐户表(引用“ AccountId ” )和'名称'
  • ContactSet:列表' ParentCustomerId '的联系人表 (通过' AccountId '引用帐户)

存储过程:

  1. 应搜索具有给定ID
  2. 的所有帐户
  3. 搜索步骤1中找到的帐户的所有父母(递归)
  4. 获取所有与第2步中的“AccountId”匹配的ParentCustomerId的联系人
  5. CREATE PROCEDURE [dbo].[sp_GetContactsForCompany]
    (      
           @projectid AS UNIQUEIDENTIFIER
    ) 
    AS WITH recursion ( AccountId, Name, ParentAccountId ) 
        AS ( 
                SELECT AccountId, Name, ParentAccountId
                FROM dbo.AccountBase
                WHERE AccountId = @projectid
    
                UNION ALL
    
                SELECT a.AccountId, a.Name, a.ParentAccountId
                FROM dbo.AccountBase AS a 
                INNER JOIN recursion AS b ON a.ParentAccountId = b.AccountId 
            )
    SELECT ContactId, FullName
    FROM dbo.ContactBase
    WHERE ParentCustomerId IN ( 
            SELECT AccountId
            FROM recursion 
    )
    ORDER BY FullName
    

    LINQ:

    from a in allAccs
    where a.AccountId == id
    select a;
    

    这给了我所有具有给定id的帐户。但现在我不知道如何应用连接和递归。

    任何提示都会很棒。

1 个答案:

答案 0 :(得分:0)

您必须使用AsHierarchy()方法。

查看此文章:http://www.scip.be/index.php?Page=ArticlesNET18#AsHierarchy