Это мой общий ответ, который я использую, поскольку в заголовках указано, что я хочу знать, как фильтровать свойства навигации.Generic repository: как фильтровать загруженные навигационные свойства
public IEnumerable<T> Query(
Expression<Func<T, bool>> filter = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
string includeProperties = "")
{
IQueryable<T> query = _objectSet.Where(e => !e.IsDeleted);
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return orderBy(query).ToList();
}
else
{
return query.ToList();
}
}
Контроллер:
var viewModel = new StudentViewModel();
viewModel.Students= _unitOfWork.Students.Query(
includeProperties: "Subjects, Instructors");
Теперь моя проблема, я хочу, чтобы добавить .где (е => e.IsDeleted!) к [предметов], и [Инструкторов] с использованием репозитория.
Благодаря
EDIT: по Ладислава, в настоящее время не представляется возможным (также упоминается здесь в MSDN: http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx)
Can i just use this instead?
viewModel.Subjects = viewModel.Students.Where(i => i.StudentID ==Id.Value)
.Single().Subjects.Where(e => !e.IsDeleted);
Моя единственная забота в том, что запрос может возвращать множество записей с IsDeleted == верно. Конечно, код, который я опубликовал как альтернативный, работает, я просто не хочу извлекать данные, которые мне не нужны, хотя я могу его фильтровать, используя приведенный выше код.
Не могли бы вы объяснить, что вы имеете в виду «добавить a .Where (e =>! E.IsDeleted) в [Subjects] и [Instructors], используя репозиторий». – Alex
@voo Я думаю, она хочет отфильтровать включенные свойства. – tschmit007
@ samantha07 Не могли бы вы показать нам метод query.Include()? – Alex