Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq-从层次结构父级中选择N级子级_C#_Sql_Linq_Entity Framework - Fatal编程技术网

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

C# Linq-从层次结构父级中选择N级子级,c#,sql,linq,entity-framework,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 如何编写基于源ID返回所有项目的linq查询?如果我的输入是SourceId=1,我将得到项目1、2、3、4和

我有以下两个表格:

父子关系表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
如何编写基于源ID返回所有项目的linq查询?如果我的输入是SourceId=1,我将得到项目1、2、3、4和5。如果我输入的sourceId是2,我将得到3项:3、4和5。如果我对sourceID的输入为4,它将返回第6项。我的父级子级为N级,项目可以显示在任何级别。 帮助:

来试试这个

--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

看看这篇关于递归查询和EF的文章。很高兴我能帮上忙!:还有一个问题。此SQL查询工作正常。用linq编写相同的查询怎么样?我正在使用实体框架开发一个MVC restful web API。是否可以在linq中编写一个查询来连接控制器中的多个表?谢谢,对不起。我以前从未用过LINQ。