Аргументы типа для метода System.Linq.Enumerable.OrderBy не могут быть выведены из использования - PullRequest
6 голосов
/ 28 января 2011

Я пытаюсь следовать демонстрации по этой ссылке , чтобы добавить jqGrid в приложение MVC.

У меня есть таблица с именем Companies, которую я пытаюсь отобразить всетка.Компания просто содержит идентификатор и имя.

Я сталкиваюсь с ошибкой в ​​функции моего контроллера:

public JsonResult DynamicGridData(string sortIndex, string sortOrder, int page, int rows)
{
    int pageIndex = Convert.ToInt32(page) - 1;
    int pageSize = rows;

    var companies = companiesRepository.Companies.OrderBy(sortIndex + " " + sortOrder).Skip(pageIndex * pageSize).Take(pageSize);
    //Error here

    ...
}

Я получаю сообщение об ошибке на линии, вызывающей OrderBy():

Аргументы типа для метода 'System.Linq.Enumerable.OrderBy (System.Collections.Generic.IEnumerable, System.Func)' не могут быть выведены из использования.Попробуйте явно указать аргументы типа.

Я действительно понятия не имею, что означает ошибка, и я не смог найти объяснения.Я не уверен, что вызывает эту ошибку в простой функции OrderBy.

Ответы [ 5 ]

21 голосов
/ 12 мая 2011

Конкретный ответ на этот вопрос вам нужно добавить

using System.Linq.Dynamic;

и вам нужно добавить ссылку на Dynamic.DLL в вашем проекте.

13 голосов
/ 28 января 2011

Вы не можете OrderBy строку;вам нужно передать лямбда-выражение или делегат.

Вам необходимо использовать Dynamic LINQ , как указано в руководстве.

7 голосов
/ 28 января 2011

Если вы ознакомились с документацией по методу, который вызываете ( Enumerable.OrderBy ), вы бы знали, что параметр является Func<TSource, TKey>, а не строкой.

Аргументы типа для метода 'System.Linq.Enumerable.OrderBy (System.Collections.Generic.IEnumerable, System.Func)' не могут быть выведены из использования.Попробуйте явно указать аргументы типа.

Компилятор попытался выяснить, как строковый параметр на самом деле является Func, а затем решил, что не может определить, что такое TSource и что такое TKey.Он просит вас помочь, указав эти типы в вызове, например:

companiesRepository.Companies.OrderBy<Company, int>(sortIndex + " " + sortOrder)

Если вы сделаете это, компилятор вместо этого скажет вам, что строка не является правильным параметром, потому что теперь онадостаточно информации, чтобы это понять.

5 голосов
/ 24 июня 2016

Я знаю, что это ошибка школьника с моей стороны, но я получил такую ​​же ошибку "CS0411 Аргументы типа для метода 'Enumerable.OrderBy (IEnumerable, Func)' не могут быть выведены из использования. Попробуйте указать тип аргументы явно. ".

Оказывается, "свойство", по которому я сортировал, на самом деле было функцией, и я опустил "()". Мне потребовались ВОЗРАСТ, чтобы найти!

В моем фрагменте кода:

return _numbers.Values.OrderBy(x => x.TotalScore);

должно было быть

return _numbers.Values.OrderBy(x => x.TotalScore());

Просто подумал, что упомяну об этом ......

2 голосов
/ 14 июля 2016
  1. Добавьте ссылку System.Linq.Dynamic.dll в ваш проект.
  2. Затем добавьте пространство имен: using System.Linq.Dynamic;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...