Я лично создаю «базовый» запрос и выставляю IQueryable.
В моих бизнес-объектах мне нравится возвращать конкретные результаты, поэтому я обычно делаю метод стиля QueryByExpression только внутренним, а затем создаю заглушки методов, где я могу передать свои критерии, а в методе, который я обрабатываю, получить результаты из базы данных и возвращают IEnumerable результатов, не подвергая остальную часть приложения нужному контексту или чему-либо еще.
Но, как говорили многие из вышеупомянутых людей, я должен был бы согласиться - показ вашего IQueryable вашему коду не ужасен, он просто делает его немного более привязанным к вашим вещам Linq2Sql.
Если вы не возражаете против создания бизнес-объектов, которые предоставляют методы, но не предоставляют тип IQueryable, я чувствую, что это лучше, но это более утомительно для установки и настройки вашего бизнес-объекта. Его также легче проверить, но это только я. Сделайте также для повторного использования, и если вы исправите ошибку, она не будет существовать в 30 различных местах в вашем коде 2 года спустя.
Только мои 2цента.