Репозиторий / IQueryable / Query Object

Я создаю хранилище, и во многих местах я видел две причины, по которым IQueryable не предоставляется вне хранилища.

1) Во-первых, потому что разные поставщики LINQ могут вести себя по-разному, и это различие должно содержаться в репозитории.

2) Второе - запретить разработчикам уровня обслуживания изменять запрос к базе данных так, чтобы он случайно вызывал проблемы с производительностью.

Я полагаю, что проблему 2 можно предотвратить, только сохранив всю логику запросов в репозитории и не допуская какой-либо формы создания внешних запросов? Но это кажется немного непрактичным для меня.

Казалось бы, проблема 1 решена с помощью шаблона объекта данных.

напримерpublic IEnumerable<T> FindBy(Query query)

Мой вопрос заключается в том, почему бы мне не просто передать лямбда-выражение, поскольку оно не зависит от поставщика, и, по-видимому, предоставило бы мне ту же функциональность, что и объект запроса, и тот же уровень разделения?

напримерpublic IEnumerable<T> FindBy(Expression<Func<T,bool>> predicate)

Есть ли причина не делать этого? Это нарушает некоторые правила? Best-практика? о чем я должен знать?

Ответы на вопрос(2)

Ваш ответ на вопрос