You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过LINQ查询获取自引用关联表中子项的完整人员详情

解决方法:获取子项的完整People详情

很简单,你只需要把Details表和People表关联起来,就像你写的SQL查询那样,在LINQ里实现JOIN或者利用EF的导航属性就能拿到完整的用户详情了。这里给你几种可行的写法:

1. LINQ查询语法(和你的SQL逻辑最接近)

直接在LINQ里做表关联,筛选出父级对应的子项后,返回完整的People对象:

// 假设你持有的父级DetailID是一个变量,比如parentDetailId
int parentDetailId = 1001; // 替换成你实际持有的ID

var childPeopleList = (from d in dbSource.Details
                       join p in dbSource.People on d.PersonID equals p.PersonID
                       where d.ParentID == parentDetailId
                       select p).ToList();

这段代码会直接返回包含子项所有People详情的列表,和你写的SQL查询逻辑完全对应。

2. LINQ方法语法(链式调用风格)

如果你更喜欢链式调用的写法,也可以这样写:

int parentDetailId = 1001;

var childPeopleList = dbSource.Details
    .Where(d => d.ParentID == parentDetailId)
    .Join(dbSource.People,
          detail => detail.PersonID,
          person => person.PersonID,
          (detail, person) => person)
    .ToList();

3. 利用EF导航属性(更简洁的写法)

如果你在Entity Framework的实体类中已经配置了导航属性(比如在Details类里定义了public virtual Person Person { get; set; },并且正确映射了PersonID外键),那可以直接通过导航属性获取,代码更简洁:

int parentDetailId = 1001;

var childPeopleList = dbSource.Details
    .Where(d => d.ParentID == parentDetailId)
    .Select(d => d.Person)
    .ToList();

这种写法不需要手动写JOIN,EF会自动帮你处理表关联。

额外提醒

  • 确保你的parentDetailId是正确的数值类型(比如int,因为你的DetailsID是整数),不要用字符串包裹。
  • 如果存在同一个人对应多个子项Detail记录的情况,可以在代码末尾加上.Distinct().ToList()来去重。

内容的提问来源于stack exchange,提问作者ronron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:58:06