Intereting Posts
Делать else если утверждения существуют в C #? LINQ to SQL: невозможно использовать SQL Server UDF в запросе LINQ WinApi – GetLastError против Marshal.GetLastWin32Error Есть ли библиотека для доступа к OLE Structured Storage из C #? Группировка каждые n минут asp.net mvc @ Html.CheckBoxFor Общий список с использованием отражения Как вы выполняете правильную привязку и обновление Xamarin.Forms ListView? Как сделать вход в мое приложение asp.net с помощью Facebook (или другого идентификатора)? Есть ли элемент управления Webbrowser, поддерживающий html5-видео (WebRTC), ansible для .Net? Json.NET – предотвратить повторное сериализацию уже сериализованного свойства Медленность в C # .net windows формы resize, когда форма имеет много элементов управления dropdownlist Почему необработанное исключение в фоновом streamе не разрушает домен приложения? Является ли каждая абстрактная функция виртуальной в C # вообще? Xamarin Forms, используя async для применения ListView ItemSource

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 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] 

Заказ не полностью переведен.

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

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

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