У меня тот же вопрос, но я не уверен, каков идеальный ответ. Я чувствую, что с возвратом DAL IQueryable <> на самом деле является наиболее гибким, потому что вы можете легко выполнить другой запрос LINQ поверх этого на другом уровне кода (при необходимости).
Еще одна вещь, которую следует учитывать, это то, что при возврате IQueryable результаты еще не загружаются в память. Так что в действительности возвращается LINQ-запрос. Таким образом, это поведение немного отличается от того, к которому люди могут привыкнуть, то есть когда что-то возвращается из модели, это фактически результаты из базы данных.
В моей ситуации мы возвращаем списки (созданные с помощью вызова IQueryable <>. ToList ()) из нашего DAL. Если этот список нужно отфильтровать, то мы создадим другой метод DAL, который вместо этого вернет отфильтрованный список. Мы выбрали это, потому что другой слой, который вызывает DAL, не должен знать, что мы используем Entity Framework таким образом (никакой зависимости не введено).