OrderBy не переводится в SQL при передаче функции селектора

Когда я выполню:

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]

Порядок полностью не переведен.

В чем проблема? Это одна и та же лямбда-функция, единственное отличие во втором случае, она сначала присваивается переменной.

1 ответ

Решение

Потому что в мире IQueryable вам нужно Expression<Func<TModel, TValue>> в качестве параметра расширения OrderBy, а не Func<TModel, TValue>

http://msdn.microsoft.com/en-us/library/system.linq.queryable.orderby

Другие вопросы по тегам