EF Query With Conditional Include

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

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

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

Supponendo che un object di lavoro abbia molte 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 object WorkItemNote che corrisponde e contiene anche l’object WorkItem corrispondente.

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

Presumo che il prossimo si voglia solo tornare al solo WorkItems , come questo:

 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