如何用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
相关产品推荐
相关产品推荐

