Когда я выполняю:
var t = db.Table1.OrderBy(x => x.Name).ToList();
В профилировщике SQL это переведенный SQL:
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[Name] AS [Name]
FROM [dbo].[Table1] AS [Extent1]
ORDER BY [Extent1].[Name] ASC
Что правильно.
Однако, если я передам функцию выбора в OrderBy:
Func<Table1, string> f = x => x.Name;
var t = db.Table1.OrderBy(f).ToList();
Переведенный SQL:
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[Name] AS [Name]
FROM [dbo].[Table1] AS [Extent1]
Заказ полностью не переведен.
В чем проблема? Это одна и та же лямбда-функция, разница только во втором случае, она сначала присваивается переменной.