无法从用法推断出方法System.Linq.Enumerable.OrderBy的类型参数

Ste*_*ven 6 c# asp.net asp.net-mvc linq-to-sql

我正在尝试按照此链接中的演示将jqGrid添加到MVC应用程序.

我有一个名为Companies的表,我试图在网格中显示.公司只包含ID和名称.

我在控制器功能中遇到错误:

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

我在调用OrderBy()的行上收到错误:

无法从用法中推断出方法'System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable,System.Func)'的类型参数.尝试显式指定类型参数.

我真的不知道这个错误是什么意思,我也找不到解释.我不确定在简单的OrderBy函数上导致此错误的原因.

小智 21

这个问题的具体答案是你需要添加

using System.Linq.Dynamic;
Run Code Online (Sandbox Code Playgroud)

并且您需要Dynamic.DLL在项目中添加引用.

  • 就我而言,它使用 System.Linq.Dynamic.Core;并且不使用 System.Linq.Dynamic。注意核心 (2认同)

SLa*_*aks 13

你不能OrderBy一个字符串; 你需要传递一个lambda表达式或委托.

您需要使用Dynamic LINQ,如教程中所述.


Amy*_*y B 7

如果您查阅了您正在调用的方法(Enumerable.OrderBy)的文档,您将知道该参数是a Func<TSource, TKey>而不是字符串.

无法从用法中推断出方法'System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable,System.Func)'的类型参数.尝试显式指定类型参数.

编译器试图弄清楚字符串参数实际上是一个Func,然后决定它无法确定什么是TSource以及什么是TKey.它要求您通过在调用中指定这些类型来提供帮助,如下所示:

companiesRepository.Companies.OrderBy<Company, int>(sortIndex + " " + sortOrder)
Run Code Online (Sandbox Code Playgroud)

如果你这样做,那么编译器会告诉你字符串不是一个正确的参数,因为现在它有足够的信息来知道它.

  • 是的,这就是我所说的.我不是想教他如何做他正在尝试的事情,我只是想解释一下编译器在说什么. (3认同)

Jam*_*yce 5

我知道这是我的一个男生错误,但是我收到了相同的错误“ CS0411无法从用法中推断出方法'Enumerable.OrderBy(IEnumerable,Func)'的类型参数。尝试显式指定类型参数。 ”。

原来,我正在排序的“属性”实际上是一个函数,而我省略了“()”。我花了AGES才找到!

在我的代码摘录中:

return _numbers.Values.OrderBy(x => x.TotalScore);
Run Code Online (Sandbox Code Playgroud)

本来应该

return _numbers.Values.OrderBy(x => x.TotalScore());
Run Code Online (Sandbox Code Playgroud)

只是以为我会提到它……