Из того, что я могу извлечь, он имеет примерно то же преимущество, что жестко запрограммированные SQL-запросы со встроенными параметрами к SQL-запросам с использованием именованных параметров: система может распознать, что они все одинаковые и используют один и тот же план запросов. 1001 *
Например, если вы просто вставите вышеприведенное выражение, оно, вероятно, будет работать так же хорошо, как и компиляция, если вы всегда передаете один и тот же объект ctx.Users
. Однако если у вас есть несколько пользовательских репозиториев одного типа и вы планируете использовать этот order by
на всех из них, было бы неплохо скомпилировать запрос один раз и использовать параметры для доступа к нему.
Исследуя это, я взглянул на то, как формируется запрос LINQ в IL: новый делегат Func<>
создается почти для каждого предложения в вашем запросе LINQ каждый раз, когда вы его вызываете. Только по этой причине, я полагаю, что компиляция запроса будет лучше для вашей системы, поскольку перегрузка памяти идет.