EF Query With Conditional Include

entity-framework

Domanda

Ho due tabelle: una tabella WorkItem e una tabella WorkItemNote. Come posso restituire un oggetto WorkItem e tutte le voci WorkItemNotes che soddisfano determinati criteri?

Penso che questo dovrebbe essere semplice, quasi come un "Include" condizionale, giusto?

Risposta accettata

Avevo intenzione di scrivere un consiglio su questo, ma la tua domanda mi ha battuto al punch.

Assumendo una WorkItem ha molti WorkItemNotes

Puoi farlo:

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

Ciò produce un elemento anonimo per ogni oggetto WorkItemNote che corrisponde e contiene anche il WorkItem corrispondente.

La risoluzione dell'identità EF assicura che lo stesso WorkItem (per riferimento) venga restituito più volte se ha più WorkItemNotes che corrispondono ai criteri.

Suppongo che dopo si voglia tornare solo agli WorkItems , in questo modo:

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

Quindi se ora fai questo:

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

Vedrete che WorkItemNotes che corrispondono al filtro originale sono stati aggiunti alla raccolta Notes di ogni workItem .

Questo a causa di qualcosa chiamato Relationship Fixup.

Cioè questo ti dà quello che vuoi includere condizionale.

Spero che questo ti aiuti

alex



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché