我有这些模特:
public class Term
{
public int TermId { get; set; }
public virtual ICollection<SubForm> SubForms { get; set; }
}
public class Form
{
public int SubFormId { get; set; }
public virtual ICollection<SubForm> SubForms{ get; set; }
}
public class SubForm
{
public int SubFormId { get; set; }
public virtual int FormId {get; set; }
public virtual Form Form {get; set;}
public virtual ICollection<Term> Terms { get; set; }
}
因此,此处的关系Form
有很多SubForm
,而SubForm
和Term
是多对多。
现在我想要的是与特定术语相关的所有表格及其子表单。
这是我现在的代码:
public IList<Form> GetFormsInTerm(int termId)
{
var forms =
termsRepository.GetForms().Where(f => f.SubForms.Any(sf => sf.Terms.Any(t => t.TermId == termId))).ToList();
return forms;
}
但由于某种原因,如果5个子表单中的1个是术语的一部分,则此代码将返回包含所有5个子表单的父表单。有没有办法让父母和那个子形式?
答案 0 :(得分:1)
由于我理解你的问题而不是使用GetForms,你可以使用Getsubforms然后就会这样,
var subforms =
termsRepository.GetSubForms().Where(sf => sf.Terms.
Any(t => t.TermId == termId)).ToList();
这将返回与Subforms
相关的所有term
,然后您可以使用加载SubForms
的{{1}}来获取其父Forms
。
但我不知道你的要求是否得到满足。