Questo è per Entity Framework for .NET 3.5:Filter il "Include" tavolo su Entity Framework interrogazione
ho la necessità di interrogare un tavolo e includo una raccolta di "molti" tavola di un uno-a -molte relazioni. Sto cercando di filtrare quella raccolta come parte della query - Sono abbastanza nuovo per Entity Framework e ho difficoltà a capirlo.
Esempio semplificato: Autore ha Libri e Libro ha una colonna IsFiction. Voglio un elenco filtrato di autori, insieme a tutti i libri di narrativa.
senza il filtro, è facile:
var q = from a in db.Authors.Include("Books")
where a.BirthYear > 1900
select a;
posso filtrare dopo il fatto, qualcosa di simile:
var fictionBooks = a.Books.Where(b => b.IsFiction);
Ma il problema è che la query originale già correva, e comprendeva questi risultati , che è l'elaborazione del database non necessaria.
posso interrogare separatamente, come:
var q = from a in db.Authors where a.BirthYear > 1900 select a;
foreach (var a in q)
{
var books = from b in db.Books
where ((b.Author.Id == a.Id) && (b.IsFiction))
select b;
}
Ma naturalmente questo è un invito a tutti gli autori, che voglio evitare pure.
posso andare a ritroso, come:
var allBooks = from b in db.Books.Include("Author")
where b.IsFiction
select b;
Ma poi sono tornato al problema originale, solo che adesso sul lato autore invece del lato libro.
Ci deve essere una soluzione che comprende tutto - posso farlo in SQL abbastanza facilmente:
select * from author a
left join book b on a.id = b.author_id and b.is_fiction = 1
where a.birth_year > 1900
Qualche suggerimento?
Vota per filtrare Include [qui] (https://entityframework.codeplex.com/workitem/47)! – Chris