Я обнаружил, что два разных запроса, один рукописный и один, сгенерированный Linq, могут выглядеть совершенно по-разному, но на самом деле, когда вы анализируете план запроса в SSMS, вы обнаруживаете, что на самом деле они почти идентичны.
Вам необходимо выполнить эти запросы в SSMS с включенным Display Actual Execution Plan
и проанализировать различные планы. Это единственный способ правильно проанализировать два и выяснить, что лучше.
В целом, Linq на самом деле очень хорошо генерирует эффективные запросы; даже если сам SQL довольно уродлив (в некоторых случаях это тот тип SQL, который написал бы человек, если бы у него было время!). Если, конечно, это сказало, это может также произвести некоторых свиней!
Кроме того, обращение к SO за помощью в выполнении запроса по стольким таблицам чревато для нас проблемами, поскольку оно будет в значительной степени зависеть от ваших индексов:)