如何在linq中包含()嵌套的子实体

我如何包括孩子的孩子?

即,乔布斯有引用具有QuoteItems

var job = db.Jobs .Where(x => x.JobID == id) .Include(x => x.Quotes) .Include(x => x.Quotes.QuoteItems) // This doesn't work .SingleOrDefault(); 

只是为了更清楚 – 我正在尝试检索单个作业项目,并且它是关联的报价(一对多)和每个报价相关的QuoteItems(一个报价可以有许多QuoteItems)

我问的原因是因为在我的报价索引视图中,我试图通过SUMming小计显示每个报价的所有报价项目的总和,但是它出现为0.我正在调用这样的小计:

 @item.QuoteItem.Sum(p => p.Subtotal) 

我相信我遇到这个问题的原因是我上面的Linq查询没有检索每个Quote的相关QuoteItems。

为了得到一份工作并急切地加载所有报价和报价,你写道:

 var job = db.Jobs .Include(x => x.Quotes.Select(q => q.QuoteItems)) .Where(x => x.JobID == id) .SingleOrDefault(); 

如果QuoteItems也是一个集合,您可能需要SelectMany而不是Select。

别人注意; 强类型的Include()方法是一种扩展方法,因此您需要using System.Data.Entity;包含using System.Data.Entity; 在文件的顶部。

这将完成工作(假设我们正在讨论entity framework,并且您想要获取子实体):

 var job = db.Jobs .Include(x => x.Quotes) // include the "Job.Quotes" relation and data .Include("Quotes.QuoteItems") // include the "Job.Quotes.QuoteItems" relation with data .Where(x => x.JobID == id) // going on the original Job.JobID .SingleOrDefault(); // fetches the first hit from db. 

有关Include语句的更多信息,请查看: http : //msdn.microsoft.com/en-us/library/bb738708(v = vs.110).aspx

@flindeberg在这里说,这对我来说很有用。 刚添加检查列表中每个父项是否有子项

  List companies = dbCtx.Companies.Where(x=>x.CompanyBranches.Count > 0) .Include(c => c.CompanyBranches) .Include("CompanyBranches.Address") .ToList();