OrderBy nie jest tłumaczony na SQL podczas przekazywania funkcji selektora
Kiedy wykonuję:
var t = db.Table1.OrderBy(x => x.Name).ToList();
W profilerze SQL jest to przetłumaczony kod SQL:
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[Name] AS [Name]
FROM [dbo].[Table1] AS [Extent1]
ORDER BY [Extent1].[Name] ASC
Który jest poprawny.
Jeśli jednak przekażę funkcję selektora do OrderBy:
Func<Table1, string> f = x => x.Name;
var t = db.Table1.OrderBy(f).ToList();
Przetłumaczony SQL to:
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[Name] AS [Name]
FROM [dbo].[Table1] AS [Extent1]
Zleceniodawca nie jest całkowicie przetłumaczony.
Jaki jest problem? Są one tą samą funkcją lambda, jedyną różnicą jest w drugim przypadku, jest ona najpierw przypisana do zmiennej.