Linq - 从层次结构父项中选择N级子项

时间:2015-03-08 04:22:44

标签: c# sql linq entity-framework

我有两张表格如下:

父子关系(表1):

SourceId    SourceParentId

1     null

2      1

3      2

4      null


Items (Table 2):

Id       SourceId

1       1

2       1

3       2

4       2

5       3

6       4

如何编写一个linq查询,根据源ID返回所有项目?如果我的输入是SourceId = 1,我将得到项目1,2,3,4& 5.如果我对sourceId的输入为2,我将得到3项:3,4和& 5.如果我对sourceID的输入是4,它将返回第6项。我的父子是N级,项目可以出现在任何级别。  帮助:(

1 个答案:

答案 0 :(得分:0)

这里试试这个

--Variable to hold input value
DECLARE @inputSourceID INT = 1;

--Recursive CTE that finds all children of input SourceID
WITH MyCTE
AS
(
SELECT SourceID,
        SourceParentID
FROM table1
WHERE SourceID = @inputSourceID
UNION ALL
SELECT  table1.SourceID, 
        table1.SourceParentID
FROM table1
INNER JOIN MyCTE 
    ON table1.SourceParentID = MyCTE.SourceID 
)

--Join the CTE with the table2 to find all id
SELECT table2.ID
FROM MyCTE
INNER JOIN table2
ON MyCTE.SourceID = table2.SourceID