Как использовать сборку System.LINQ.Dynamic с IEnumerable (Of T) - PullRequest
3 голосов
/ 13 мая 2009

Я пытаюсь взять окончательное решение от Фила Хаака здесь и отсортировать его, используя его убийственный запрос LINQ, но вместо использования контекста данных, как он, я хочу выполнить запрос к IEnumerable (Of T). .. не везет.

Public Function DynamicGridData(ByVal sidx As String, ByVal sord As String, ByVal page As Integer, ByVal rows As Integer) As ActionResult
Dim list As List(Of User) = UserService.GetUserCollection()
Dim FilteredAndSortedList = list.OrderBy(sidx + " " + sord).Skip(pageIndex * pageSize).Take(pageSize)

Return JSON(jsonData)
End Function

В настоящее время я получаю сообщение об ошибке ниже моей строки .OrderBy (sidx + "" + sord)

"Тип (ы) данных параметра (ов) типа в методе расширения 'Открытая функция OrderBy (Of TKey) (keySelector As System.Func (Of User, TKey)) Как System.Linq.IOrderedEnumerable (Of User) 'определенный в' System.Linq.Enumerable 'не может быть выведен из этих аргументов. Если явно указать тип данных, это может исправить эту ошибку. "

РЕДАКТИРОВАТЬ:

Я обнаружил, что проблема в том, что мой «список» в приведенном выше примере не относится к типу IQueryable. Просто добавив .AsQueryable () добился цели!

Public Function DynamicGridData(ByVal sidx As String, ByVal sord As String, ByVal page As Integer, ByVal rows As Integer) As ActionResult
Dim list As List(Of User) = UserService.GetUserCollection()
Dim FilteredAndSortedList = list.AsQueryable().OrderBy(sidx + " " + sord).Skip(pageIndex * pageSize).Take(pageSize)

Return JSON(jsonData)
End Function

Ответы [ 2 ]

2 голосов
/ 14 мая 2009

Я не уверен, но я думаю, что это связано с тем фактом, что вы передаете в OrderBy строку, а не выражение (TDelegate), которое оно и ожидает.

Взгляните на эту статью и посмотрите, поможет ли она.

http://msdn.microsoft.com/en-us/library/bb549264.aspx

Edit:

Я взглянул на Кодекс Фила и на дополнительную документацию, предоставленную Скоттом Гу. Вы должны быть в состоянии передать строку, в которой можно упорядочить. В таком случае мой следующий вопрос будет, если вы заберете заказ, работает ли ваше приложение? Причина этого в том, что мне интересно, есть ли у нас еще одна ошибка, которую мы упускаем. Например, вы возвращаете JSON (jsondata), но я не вижу, где вы инициализируете jsondata. Теперь я не думаю, что это ваша ошибка, потому что вы заявляете, что получаете ее в заявлении orderby. Однако, если вы на самом деле получаете ошибку, потому что объект, который вы пытаетесь заказать, пуст, то у вас есть еще одна проблема.

0 голосов
/ 06 января 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...