По моему опыту, накладные расходы минимальны, при условии, что человек, пишущий запросы, знает, что он делает, и принимает обычные меры предосторожности для обеспечения оптимальности сгенерированных запросов, наличия необходимых индексов и т. Д. И т. Д. В другими словами, влияние базы данных должно быть одинаковым; на стороне приложения есть минимальные, но обычно незначительные накладные расходы.
Тем не менее ... есть одно исключение; если один запрос генерирует несколько агрегатов, поставщик L2S преобразует его в большой запрос с одним подзапросом на агрегат. Для большой таблицы это может оказать значительное влияние на ввод-вывод, так как стоимость ввода-вывода в дБ для запроса увеличивается на величины для каждого нового агрегата в запросе.
Обходной путь для этого, конечно, состоит в том, чтобы переместить агрегаты в сохраненный процесс или представление. У Мэтта Уоррена есть пример кода для альтернативного поставщика запросов, который переводит запросы такого типа более эффективным способом.
Ресурсы:
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=334211
http://blogs.msdn.com/mattwar/archive/2008/07/08/linq-building-an-iqueryable-provider-part-x.aspx