首先在多对多的Entity框架代码中获取父级只有相对子元素

时间:2011-11-21 23:46:55

标签: entity-framework entity-framework-4.1

我有这些模特:

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,而SubFormTerm是多对多。

现在我想要的是与特定术语相关的所有表格及其子表单。

这是我现在的代码:

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个子表单的父表单。有没有办法让父母和那个子形式?

1 个答案:

答案 0 :(得分:1)

由于我理解你的问题而不是使用GetForms,你可以使用Getsubforms然后就会这样,

 var subforms =
            termsRepository.GetSubForms().Where(sf => sf.Terms.
Any(t => t.TermId == termId)).ToList();

这将返回与Subforms相关的所有term,然后您可以使用加载SubForms的{​​{1}}来获取其父Forms。 但我不知道你的要求是否得到满足。