簡體   English   中英

將具有遞歸的SQL查詢轉換為LINQ

[英]Transform SQL query with recursion into LINQ

我陷入了必須將存儲過程轉換為LINQ查詢的任務。

該模型:

  • AccountSet:具有“ AccountId ”,“ ParentAccountId ”(引用“ AccountId ”)和“ 名稱 ”列的帳戶表
  • ContactSet:帶有“ ParentCustomerId ”列的聯系表(通過“ AccountId ”引用一個帳戶)

存儲過程:

  1. 它應搜索具有給定ID的所有帳戶
  2. 在所有父級(遞歸)中搜索在步驟1中找到的帳戶
  3. 提取其ParentCustomerId與在步驟2中找到的“ AccountId”匹配的所有聯系人
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的帳戶。 但是現在我不知道如何應用聯接和遞歸。

任何提示都會很棒。

您必須使用AsHierarchy()方法。

檢查本文: http : //www.scip.be/index.php?Page=ArticlesNET18#AsHierarchy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM