Создание запросов в отдельном классе (например, построитель запросов). Затем выполните это в вызывающем. Затем оберните (украсьте) конструктор другим классом (декоратором), который добавит результирующий запрос с условиями, которые вам нужны:
interface IQueryBuilder
{
IQuerable<T> BuildQuery<T>(...);
}
class EntityFrameworkQueryBuilder : IQueryBuilder
{
public IQuerable<T> BuildQuery<T>(...) => query;
}
class PostConditionQueryBuilderDecorator : IQueryBuilder
{
ctor(IQueryBuilder builder) => _builder = builder;
public IQuerable<T> BuildQuery<T>(...) => query.Where(x => x.Foo != bar);
}
Многие DI-контейнеры имеют первоклассную поддержку для декораторов .