У меня есть модель БД со следующими таблицами:
A * ---- 1 B 1 ---- * C
На основе этой схемы я создал модель данных сущностей, которая позволяет мне загружать все As в моей БД. Поскольку я также использую Bs в своих запросах Linq, я загружаю как:
using(MyEntities entities = new MyEntities()){
var result = from a in entities.As.Include("B") where a.Code == 123 && a.B.Code == 321 select a;
}
Результаты могут быть дополнительно отфильтрованы пользователем, поэтому я создаю фильтры в зависимости от выбора пользователя, например:
int filterValue = 222; //FilterValue is passed in by the user
IList<Func<A, bool>> filters = new List<Func<A, bool>>();
filters.Add(x => x.B.C.Any(i => i.C.Code == filterValue));
...build more filters...
Позже я применяю фильтры, используя:
foreach (var filter in filters)
{
results = results.Where(filter);
}
Обратите внимание, что в коде фильтра я использую ссылку C (которая является коллекцией Cs). Вот где EF терпит неудачу, потому что коллекция C пуста (не была загружена). Как я могу заставить EF охотно загружать все связанные свойства для графа объекта, чтобы я мог применить свои фильтры или есть лучший способ сделать это?
Спасибо.