Я создаю репозиторий, и я видел во многих местах 2 причины не выставлять IQueryable вне репозитория.
1) Первый заключается в том, что разные поставщики LINQ могут вести себя по-разному, и эта разница должна содержаться в репозитории.
2) Во-вторых, чтобы разработчики уровня сервиса не модифицировали запрос базы данных, чтобы он случайно вызывал проблемы с производительностью.
Я думаю, что проблема 2 может быть предотвращена только путем хранения всей логики запросов в репозитории и не допускающей создания какой-либо формы внешнего запроса? Но для меня это кажется немного непрактичным.
Проблема 1, похоже, будет решена с использованием шаблона объекта данных.
например. public IEnumerable<T> FindBy(Query query)
Мой вопрос в том, почему бы мне не просто передать выражение лямбда в, поскольку это независимое от поставщика, похоже, предоставит мне те же функции, что и объект запроса, и тот же уровень разделения?
например. public IEnumerable<T> FindBy(Expression<Func<T,bool>> predicate)
Есть ли причина не делать этого? Разве это нарушает некоторые правила? Best-практика? о чем я должен знать?