linq查询通过自引用连接表获取子项

时间:2018-01-22 11:38:24

标签: c# sql linq lambda

我有2个SQL Server表。父母可以有很多孩子,详情如下。在这种情况下 - 约翰史密斯有一个孩子(丽莎史密斯)的关系

People
|---------------|------------|
|   PersonID    |    Name    |
|---------------|------------|
|       1       | John Smith |
|---------------|------------|
|       2       | Lisa Smith |
|---------------|------------|

Details
|---------------|---------------|---------------|---------------|
|   DetailsID   |   PersonID    | DetailsType   | ParentID      |
|               |               |               |(ref DetailsID)|
|---------------|---------------|---------------|---------------|
|    1001       |1 (John Smith) | parent        | NULL          |
|---------------|---------------|---------------|---------------|
|    1002       |2 (Lisa Smith) | child         | 1001          |
|---------------|---------------|---------------|---------------|

在SQL查询中,我会通过DetailsID获取John的孩子(此时代码中已经有DetailsID)

SELECT p.Name
    FROM People p
    JOIN Details d on d.PersonID = p.PersonID
    WHERE ParentID = 1001

在我的C#项目中,我知道如何获取Details表中的ParentID列表 详情ID但我不知道如何获取孩子们的详细信息。 这就是我的映射中的内容:

Children = (from d in dbSource.Details
            where d.ParentID == 'the DetailID for parent that I have'
            select d.PersonId).ToList())

这将返回Childrens' ID,但我需要从People表中返回包含所有子项详细信息的对象列表。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用join-clasue来获取人员数据

Children = ( from p in dbSource.People 
             join d in dbSource.Details
             on p.PersonID equals d.PersonID 
             where d.ParentID == 'the DetailID for parent that I have'
            select p
            ).ToList())

答案 1 :(得分:0)

您必须尝试使用​​join子句连接表 尝试以下查询

var Children = from p in dbSource.People
               join d in dbSource.Details
               on p.PersonId equals d.PersonId
               where d.ParentId == 123 select new 
               {PersonId = p.PersonId, PersonName = p.Name};