To jest dla Entity Framework dla .NET 3.5:Przesączyć „obejmuje” tabeli na jednostkę zapytania Framework
mam potrzebę kwerendy w tabeli i zawierać zbiór „wiele” tabeli jeden-do - wiele związków. Próbuję filtrować tę kolekcję jako część kwerendy - Jestem całkiem nowy w Entity Framework i mam problem z jej odgadnięciem.
Uproszczony przykład: autor ma książki, a książka ma kolumnę IsFiction. Chcę mieć przefiltrowaną listę autorów wraz ze wszystkimi książkami fikcyjnymi.
bez filtra, to proste:
var q = from a in db.Authors.Include("Books")
where a.BirthYear > 1900
select a;
mogę filtrować po fakcie, coś jak:
var fictionBooks = a.Books.Where(b => b.IsFiction);
Ale problemem jest to, że pierwotne zapytanie już zabrakło i objęły te wyniki , co jest niepotrzebnym przetwarzaniem bazy danych.
mogę zapytać osobno, jak:
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;
}
Ale oczywiście to jest jeden wezwanie dla każdego autora, który chcę uniknąć, jak również.
mogę iść do tyłu, jak:
var allBooks = from b in db.Books.Include("Author")
where b.IsFiction
select b;
Ale jestem z powrotem do pierwotnego problemu, chyba teraz po stronie autora, a nie od strony księgowej.
Musi być rozwiązanie, które obejmuje wszystko - można to zrobić w SQL dość łatwo:
select * from author a
left join book b on a.id = b.author_id and b.is_fiction = 1
where a.birth_year > 1900
Wszelkie sugestie?
Głosuj na filtrowanie Dołącz [tutaj] (https://entityframework.codeplex.com/workitem/47)! – Chris