Requête EF avec inclusion conditionnelle

entity-framework

Question

J'ai deux tables: une table WorkItem et une table WorkItemNote. Comment renvoyer un WorkItem et tous les WorkItemNotes qui répondent à certains critères?

Je pense que cela devrait être simple, presque comme un "Include" conditionnel, non?

Réponse acceptée

J'avais l'intention d'écrire un conseil à ce sujet, mais votre question m'a emporté.

En supposant qu'un WorkItem ait de nombreux WorkItemNotes

tu peux le faire:

var intermediary = (from item in ctx.WorkItems
              from note in item.Notes
              where note.SomeProp == SomeValue
              select new {item, note}).AsEnumerable();

Cela produit un élément anonyme pour chaque WorkItemNote qui correspond et contient également le WorkItem correspondant.

La résolution d'identité EF garantit que le même WorkItem (par référence) est renvoyé plusieurs fois s'il contient plusieurs WorkItemNotes correspondant aux critères.

Je suppose que vous souhaitez ensuite revenir simplement aux WorkItems , comme ceci:

var workItems = intermediary.Select(x => x.item).Distinct().ToList();

Alors si vous faites maintenant ceci:

foreach(var workItem in workItems)
{
   Console.WriteLine(workItem.Notes.Count)
}

Vous constaterez que les WorkItemNotes correspondant au filtre d'origine ont été ajoutés à la collection Notes de chaque workItem .

Ceci est dû à quelque chose appelé Correction des relations.

C'est-à-dire que cela vous donne ce que vous voulez inclure.

J'espère que cela t'aides

Alex



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow