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

如何用LINQ查询关联三个模型并返回含ExitHistories的Document数据?

解决嵌套关联集合的查询问题

你的问题在于当前查询只关联了Document和Item,但没有处理Item与ExitHistory的关联,所以返回的Items中ExitHistories集合是空的。这里提供两种可行的解决方式:

方式一:利用EF导航属性(推荐)

因为你的模型已经定义了层级导航属性(Document.Items、Item.ExitHistories),可以直接使用Include和ThenInclude来加载嵌套集合,EF会自动处理关联逻辑:

var document1 = context.Documents
    .Include(d => d.Items)
        .ThenInclude(i => i.ExitHistories)
    .FirstOrDefault(d => d.Id == request.Id);

这种方式代码简洁,EF会生成优化的SQL查询,自动关联三张表并返回完整的嵌套结构。

方式二:手动LINQ关联查询

如果坚持使用join的查询表达式写法,需要在投影Item时,手动关联查询对应的ExitHistory集合:

var document1 = (
    from document in context.Documents
    where document.Id == request.Id
    join item in context.Items on document.Id equals item.DocumentId into itemsGroup
    select new 
    {
        Id = document.Id,
        Code = document.Code,
        Items = itemsGroup.Select(i => new 
        {
            i.Id,
            i.DocumentId,
            i.Name,
            ExitHistories = context.ExitHistories
                .Where(eh => eh.ItemId == i.Id)
                .ToList()
        }).ToList()
    }
).FirstOrDefault();

这里在Items的投影中,通过Where筛选出当前Item对应的所有ExitHistory,确保返回的集合包含嵌套数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:42:05