Я работаю с Entity Framework - Code First, и у меня есть следующий контекст (экстракции по крайней мере):Entity Framework: Фильтрующие свойства навигации
public class TestContext : DbContext
{
public DbSet<User> Users { get; set}
public DbSet<Book> Books { get; set}
}
А в классе пользователя у меня есть это свойство навигации:
public virtual Collection<Book> Books { get; set}
ergo, пользователь имеет много книг. Проблема в том, что я хочу отфильтровать книги, но поскольку у меня есть около 500 000 книг в моей базе данных, я не могу позволить себе приносить все книги в память и фильтровать их позже. Мне нужно выполнить запрос к базе данных с предложением фильтра.
Когда я это сделать:
// Doesn't matter how i get the user...
var allBooks = user.Books; // Here it brings all the books of the user
var activeBooks = allBooks.Where(n => n.Active);
Я думаю, что вы можете увидеть проблему ... я хочу добавить к запросу фильтры перед выполнением ... но я не знаю, как я могу сделать что.
Буду признателен за любой совет.
Спасибо.
EDIT:
Другой пример с явным контексте, может быть, это убрать вещи ...
IQueryable<Course> query = new TestContext().Set<User>(); // It doesn't run the query yet.
var a = query.Where(n => n.Active); // Here it runs the query!
var b = a.ToList(); // The items was on memory...
Да, я знаю, что это так, но я проверяю intelltrace на VS, и запрос выполняется, когда я получаю доступ к свойству навигации. В вашем примере пользователь.Books привезет все книги, а затем «где» будет фильтровать их в памяти ... –
Я добавил еще один пример ... проверьте его, может быть, он что-то очищает .. . –
Спасибо! Он решен! но теперь у меня есть еще одна проблема ... Свойства навигации ... проверьте это: http://stackoverflow.com/questions/20357511/entity-framework-naviogation-properties-issue –