如果我有一个如下所示的查询:
var forms = repo.GetForms().Where(f => f.SubForms.Any(sf => sf.Classes.Any(c => c.TermId == termId)));
从这里你可以看到我的架构如下:
SubForm有许多具有多个Term的Class.
我想要的是:
所有SubForms及其在特定术语中的类.
现在发生的事情是我获得了在特定术语中具有任何类的所有SubForm.这意味着SubForm会返回所有子类,而不仅仅是与Term相关的子类.
例如.我有2个术语,每个术语有2个类的子表单.此查询返回4个类而不是该特定术语中的2个类.
是否有任何Include(‘Expression’)可以用来表示我只想根据条件包含所有类?或者我的查询错了?
解决方法
用这个:
var subForms = repo.GetSubForms.Select(sf = new { SubForm = sf,Classes = sf.Classes.Where(c => c.TermId == termId) }).ToList() .Select(t => t.SubForm) .ToList();
更新:根据@ Slauma的评论:
如果你想加载他们有任何具有Term by termId的Class的SubForms,你可以从end到begin;像这样:
var subForms = repo.Terms.Where(t => t.Id == termId).Select(t => new { Term = t,Class = t.Class,SubForm = t.Class.SubForm }).ToList() .Select(t => t.SubForm).ToList();
或者以最简单的方式,您可以在您的期限上使用Include,请参阅:
var subForms = repo.Terms.Include("Class.SubForm").Where(t => t.Id == termId) .Select(t => t.Class.SubForm).ToList();
注意:正如我从您的问题中可以理解的那样,您有这样的关系:
SubForm has_many Class has_many Term
SubForm has_many Class Term has_many Class
如果可以的话,请提出您的实体,或者更多地解释他们之间的关系.谢谢.