Mam zamiar napisać na ten temat a tip, ale twoje pytanie pokonało mnie.
Zakładając WorkItem
ma wiele WorkItemNotes
można to zrobić:
var intermediary = (from item in ctx.WorkItems
from note in item.Notes
where note.SomeProp == SomeValue
select new {item, note}).AsEnumerable();
To daje anonimowego elementu dla każdego WorkItemNote
który pasuje, i posiada odpowiednie WorkItem
też.
Funkcja identyfikacji tożsamości EF zapewnia, że ten sam numer WorkItem
(przez odniesienie) jest zwracany wiele razy, jeśli ma wiele wartości WorkItemNotes
spełniających kryteria.
Zakładam, że w przyszłym chcesz po prostu wrócić do tylko WorkItems
coś takiego:
var workItems = intermediary.Select(x => x.item).Distinct().ToList();
Następnie jeśli teraz zrobić:
foreach(var workItem in workItems)
{
Console.WriteLine(workItem.Notes.Count)
}
Zobaczysz, że WorkItemNotes
pasujących oryginalny filtr został dodany do kolekcji Notes każdego z workItem
.
Dzieje się tak z powodu czegoś, co nazywa się Fixup Relationship.
tj. to daje ci to, co chcesz, warunkowe.
Nadzieja to pomaga
Alex
Naprawdę? x.Item będzie mieć odpowiednie WorkItemNotes? To cudownie! Cieszę się, że opublikowałeś to, ponieważ to, co obecnie mam zapytania do db dla każdego WorkItem. Dzięki! –
Jedno pytanie: dlaczego pośrednik musi być niezliczony? Czy to może być IQueryable? –
Yeap to działa. Możesz użyć tego do innych trików, takich jak sortowanie, zobacz Tip 1 z mojej serii porad! –