Điều này dành cho Khuôn khổ thực thể cho .NET 3.5:Lọc bảng "Bao gồm" trên truy vấn Khung thực thể
Tôi có nhu cầu truy vấn một bảng và bao gồm tập hợp bảng "nhiều" của một -many mối quan hệ. Tôi đang cố gắng lọc bộ sưu tập đó như là một phần của truy vấn - Tôi khá mới đối với Entity Framework và tôi đang gặp khó khăn trong việc tìm ra nó.
Ví dụ đơn giản: Tác giả có Sách và Sách có cột IsFiction. Tôi muốn một danh sách các tác giả được lọc, cùng với tất cả các cuốn tiểu thuyết.
Nếu không có bộ lọc, thật dễ dàng:
var q = from a in db.Authors.Include("Books")
where a.BirthYear > 1900
select a;
Tôi có thể lọc sau khi thực tế, một cái gì đó như:
var fictionBooks = a.Books.Where(b => b.IsFiction);
Nhưng vấn đề là các truy vấn ban đầu đã chạy, và bao gồm những kết quả , đó là xử lý cơ sở dữ liệu không cần thiết.
Tôi có thể truy vấn riêng biệt, như:
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;
}
Nhưng tất nhiên đó là một cuộc gọi cho mỗi tác giả, mà tôi muốn tránh là tốt.
tôi có thể đi thụt lùi, như:
var allBooks = from b in db.Books.Include("Author")
where b.IsFiction
select b;
Nhưng sau đó tôi trở lại vấn đề ban đầu, ngoại trừ bây giờ ở phía tác giả thay vì phía cuốn sách.
Có phải là một giải pháp mà bao gồm tất cả mọi thứ - Tôi có thể làm điều đó trong SQL khá dễ dàng:
select * from author a
left join book b on a.id = b.author_id and b.is_fiction = 1
where a.birth_year > 1900
Bất kỳ lời đề nghị?
Bỏ phiếu cho bộ lọc Bao gồm [ở đây] (https://entityframework.codeplex.com/workitem/47)! – Chris