Holen Sie sich übergeordnete Elemente mit nur relativ untergeordneten Elementen in vielen bis vielen Entity-Framework-Codes

  • Ich habe folgende Modelle:

     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; }
    }
     

    Die Beziehung hier ist also Form hat viele SubForm, während SubForm und Term viel zu viele sind.

    Nun möchte ich alle Formen und ihr Unterformular, die sich auf einen bestimmten Begriff beziehen .

    Dies ist der Code, den ich gerade habe:

     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;
    }
     

    Wenn jedoch eines von fünf Unterformularen Teil eines Begriffs ist, gibt dieser Code dieses übergeordnete Formular mit ALL 5 Unterformularen zurück. Gibt es eine Möglichkeit, einfach das übergeordnete Element und nur dieses Teilformular zu erhalten?

    22 November 2011
    Shawn Mclean
1 answer
  • Da ich Ihre Frage verstanden habe, anstatt GetForms zu verwenden, können Sie Getsubforms verwenden. Dann wird es so sein:

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

    Dies gibt alle Subforms zurück, die mit term zusammenhängen. Dann können Sie die geladenen SubForms verwenden, um ihre Eltern Forms zu erhalten.
    Damit wissen Sie, dass Ihre Anforderung erfüllt ist.

    22 November 2011
    Jayantha Lal Sirisena