201 votes

EF LINQ sont multiples et imbriquées des entités

Ok, j'ai tri-nivelé entités avec la hiérarchie suivante: Cours -> Module -> Chapitre

Ici était à l'origine EF LINQ déclaration:

Course course = db.Courses
                .Include(i => i.Modules.Select(s => s.Chapters))
                .Single(x => x.Id == id); 

Maintenant, je veux inclure d'une autre entité appelée Laboratoire qui est associée à un cours.

Comment dois-je inclure le Laboratoire de l'entité?

J'ai essayé ce qui suit, mais il ne fonctionne pas:

Course course = db.Courses
                .Include(i => i.Modules.Select(s => s.Chapters) && i.Lab)
                .Single(x => x.Id == id); 

Toutes les idées sur la dont la 2e Entité?

N'importe quel morceau de conseil ou information serait très appréciée. Merci!

276voto

Jens Kloster Points 3974

Avez-vous essayé juste ajouter un autre Include:

Course course = db.Courses
                .Include(i => i.Modules.Select(s => s.Chapters))
                .Include(i => i.Lab)
                .Single(x => x.Id == id);

Votre solution échoue, car Include ne prend pas un opérateur booléen

Include(i => i.Modules.Select(s => s.Chapters) &&          i.Lab)
                           ^^^                  ^             ^ 
                          list           bool operator    other list

Mise à jour Pour en savoir plus, télécharger LinqPad et regarder à travers les échantillons. Je pense que c'est le moyen le plus rapide pour se familiariser avec Linq et Lambda.

En tant que start - la différence entre Select et Include est ce qu'avec un Select, vous décidez ce que vous souhaitez retourner (aka la projection). L'include est un Impatient de Chargement de la fonction, qui raconte Cadre de l'Entité que vous souhaitez inclure des données provenant d'autres tables.

La syntaxe peut également être dans la chaîne. Comme ceci:

           db.Courses
            .Include("Module.Chapter")
            .Include("Lab")
            .Single(x => x.Id == id);

Mais les échantillons dans LinqPad explique cela mieux.

25voto

Ilya Ivanov Points 14673

fait partie de l’interface fluent, donc vous pouvez écrire plusieurs déclarations chaque autre suite

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X