Для начала: здесь нет «правильного» или «неправильного». Это просто вопрос того, что лучше всего работает для вас и системы, которую вы строите. Например, Роб Конери сделал пример приложения ASP.NET под названием Storefront с точным шаблоном, который вы описываете, и это вызвало большую войну пламени. Большая часть обсуждения развивалась вокруг шаблона репозитория, который считается «оригинальным», как его описывает Эрик Эванс в своей книге « Домен-управляемый дизайн », и который описывает интерфейс репозитория как тот, который принимает и / или возвращает фактические экземпляры (списков экземпляров), а не какой-либо интерфейс запроса.
Так много для теории. Что выбрать для вашей системы? Причина, по которой я не выбрал бы прямой путь IQueryable, заключается в том, что он фактически пропускает немного моей стратегии персистентности на уровень клиента (в данном случае это уровень обслуживания). Поскольку в первую очередь имеет смысл возвращать IQueryable, если вы извлекаете объекты из базы данных, используя LINQ для [метод доступа к базе данных (например, SQL, Entities, ...)]. Только тогда .Where или .OrderBy будут оптимизировать результат вашего запроса. Это, очевидно, не имеет смысла, если вы используете некоторый код кода доступа к базе данных, который получает полный список, который вы затем выставляете из репозитория, используя LINQ to Objects. Вкратце: вы связываете свой клиентский уровень с используемой вами стратегией доступа к базе данных на основе LINQ.
Будучи немного пуристом, я бы предпочел не показывать эту связь с LINQ из своего хранилища, и я бы предпочел предлагать критерии «где» и «порядок» через параметры операций хранилища. Я могу выполнить всю поисковую оптимизацию в хранилище и вернуть аккуратный чистый набор доменных объектов.
Итак, в конце концов, все сводится к следующему: все, что работает лучше для вас, в порядке.