29 votes

Rejoindre et inclure dans Entity Framework

J'ai la requête suivante de Linq vers les entités. Le problème est qu'il semble ne pas charger la relation "Tags" même si j'ai inclus quelque chose pour cela. Cela fonctionne bien si je ne fais pas de jointure sur les tags mais j'ai besoin de le faire.

            var items = from i in db.Items.Include("Tags")
                        from t in i.Tags
                        where t.Text == text
                        orderby i.CreatedDate descending
                        select i;

Y a-t-il une autre façon de poser cette requête? Peut-être la diviser ou quelque chose?

50voto

Craig Stuntz Points 95965

Eh bien, l'Include contredit le where. Include dit : "Charger toutes les balises." Le where dit : "Charger certaines balises." Lorsqu'il y a une contradiction entre la requête et l'Include, la requête l'emportera toujours.

Pour retourner toutes les balises de n'importe quel élément avec au moins une balise == texte :

        var items = from i in db.Items.Include("Tags")
                    where i.Tags.Any(t => t.Text == text)
                    orderby i.CreatedDate descending
                    select i;

(Non testé, car je n'ai pas votre BD/modèle)

Voici un très bon livre gratuit sur LINQ.

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