LINQ 查询,用于通过自引用联接表获取子项



我有 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# 项目中,我知道如何通过以下方式获取详细信息表中的父 ID 列表详细信息ID,但我不知道如何获取孩子的详细信息。这是我的映射中的内容:

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

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

提前谢谢。

您可以使用 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())

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

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

最新更新