Есть много факторов, которые способствуют здесь, и есть много неизвестных для меня, поэтому подтекст для моего ответа «это зависит».
1) С четко определенным Datacontext
LINQ-to-SQL обычно генерирует эффективные запросы. Фильтры автоматически параметризуются, что позволяет ядру базы данных кэшировать планы выполнения. Поэтому я считаю, что единственное время хранимых процедур будет работать лучше, если бы потребовались подсказки запроса или какой-либо другой механизм, не поддерживаемый генератором запросов. Я считаю, что наилучшей практикой является использование LINQ и использование sprocs только тогда, когда может быть продемонстрирована значительная оптимизация.
2) Обычно ограничение поездок в БД является оптимальным. Но чтение количества объединений, необходимых в ваших отношениях, заставляет задуматься, будет ли вам хорошо, если вы добавите представление. Это отвлечет сложность, представления хорошо интегрируются с LINQ и защитит ваш код от будущих изменений схемы.
Позвольте мне также рекомендовать LINQPad , чтобы помочь оптимизировать запросы LINQ-to-SQL. Он стал незаменимым инструментом для меня, и, если вы его еще не используете, я уверен, что он станет и для вас.
Также, чтобы узнать больше о LINQ vs SProcs, ознакомьтесь с обсуждением в этом вопросе: LINQ-to-SQL vs хранимые процедуры?