C# 使用LINQ搜索和排序可数项

C# 使用LINQ搜索和排序可数项,c#,asp.net-mvc,json,angularjs,linq,C#,Asp.net Mvc,Json,Angularjs,Linq,我是MVC和LINQ的新手,我正在学习如何在分配给我的新项目中使用AngularJs和MVC。因此,我通过在线视频学习这些技术。导师使用代码优先的方法,因此Visual Studio创建了所有必要的文件和与导师模型匹配的数据库。另一方面,我已经有了一个数据库,并且我创建了Api来对DB执行REST操作。所以当我运行下面的代码时 public IEnumerable<Todo> GetTodos() { return Models.DbStor

我是MVC和LINQ的新手,我正在学习如何在分配给我的新项目中使用AngularJs和MVC。因此,我通过在线视频学习这些技术。导师使用代码优先的方法,因此Visual Studio创建了所有必要的文件和与导师模型匹配的数据库。另一方面,我已经有了一个数据库,并且我创建了Api来对DB执行REST操作。所以当我运行下面的代码时

        public IEnumerable<Todo> GetTodos()
    {

        return Models.DbStoredProcModel.GetAllTodos.GetAllTodoEntryStoredProcedure();
    }
public IEnumerable GetTodos()
{
返回Models.DbStoredProcModel.GetAllTodos.getAllToDoEntryStoredProcess();
}
它返回一个Json输出,如下所示

到目前为止,我的json输出与视频教程相匹配,尽管我们的代码方法不同。所以导师用他写的这段代码

导师代码:

    public IEnumerable<Todo> GetTodos(string q= null,string sort = null, bool desc = false, int ? limit = null, int offset =0)
    {
        var result = ((IObjectContextAdapter)db).ObjectContext.CreateObjectSet<Todo>();

        IQueryable<Todo> items = string.IsNullOrEmpty(sort)
            ? result.OrderBy(o => o.Priority)
            : result.OrderBy(String.Format("it. {0} {1}", sort, desc ? "DESC" : "ASC"));

        if (!string.IsNullOrEmpty(q) && q != "undefined")
            items = items.Where(t => t.Text.Contains(q));

        if (offset > 0) items = items.Skip(offset);
        if (limit.HasValue) items = items.Take(limit.Value);

        return items;
    } 
public IEnumerable GetTodos(字符串q=null,字符串sort=null,bool desc=false,int?limit=null,int offset=0)
{
var result=((IObjectContextAdapter)db.ObjectContext.CreateObjectSet();
IQueryable items=string.IsNullOrEmpty(排序)
?result.OrderBy(o=>o.Priority)
:result.OrderBy(String.Format(“it.{0}{1}”,sort,desc?“desc”:“ASC”);
如果(!string.IsNullOrEmpty(q)&&q!=“未定义”)
items=items.Where(t=>t.Text.Contains(q));
如果(偏移量>0)项=项。跳过(偏移量);
如果(limit.HasValue)items=items.Take(limit.Value);
退货项目;
} 
它将允许他对返回的数据执行搜索和排序操作

下面是我自己的代码,我也在尝试着做同样的事情

       public IEnumerable<Todo> GetTodos(string q= null,string sort = null, bool desc = false, int ? limit = null, int offset =0)
    {
        var result = Models.DbStoredProcModel.GetAllTodos.GetAllTodoEntryStoredProcedure( );

        IQueryable<Todo> items = string.IsNullOrEmpty(sort)
            ? result.OrderBy(o => o.Priority)
             // i get the error on the line below
            : result.OrderBy(String.Format("it. {0} {1}", sort, desc ? "DESC" : "ASC"));

        if (!string.IsNullOrEmpty(q) && q != "undefined")
            items = items.Where(t => t.Text.Contains(q));

        if (offset > 0) items = items.Skip(offset);
        if (limit.HasValue) items = items.Take(limit.Value);

        return items;

    }
public IEnumerable GetTodos(字符串q=null,字符串sort=null,bool desc=false,int?limit=null,int offset=0)
{
var result=Models.DbStoredProcModel.GetAllTodos.GetAllTodoEntryStoredProcedure();
IQueryable items=string.IsNullOrEmpty(排序)
?result.OrderBy(o=>o.Priority)
//我在下面的行中得到了错误
:result.OrderBy(String.Format(“it.{0}{1}”,sort,desc?“desc”:“ASC”);
如果(!string.IsNullOrEmpty(q)&&q!=“未定义”)
items=items.Where(t=>t.Text.Contains(q));
如果(偏移量>0)项=项。跳过(偏移量);
如果(limit.HasValue)items=items.Take(limit.Value);
退货项目;
}
然而,我得到了一个错误的说法

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

如何修复此问题?

更改

 result.OrderBy(String.Format("it. {0} {1}", sort, desc ? "DESC" : "ASC"))

在应用程序的上下文中没有有意义的解释。在我看来,它像是动态linq,需要的引用比您将要引用的引用引入替代的OrderBy定义


我的建议是检查教程引用的名称空间(在项目引用和本文件顶部),以防遗漏任何名称空间。

我猜,因为您使用的是存储过程(不返回IQueryable),所以尝试将其分配给
失败。实际上,您应该将参数传递给存储过程。是否确实存在接受字符串的OrderBy extesion版本?同样,我不知道有一个“OrderBy”方法接受字符串作为参数。您应该提供更多信息。请指定GetAllToDoEntryStoredProcess中的返回类型,而不是var结果。它可能不是IEnumerable。它的可能副本不会改变任何东西。那一行代码已经正确地推断出了泛型参数。哦,是的,我现在明白了,我将更新到有问题的那一行。这仍然远远不能回答这个问题。显然,其目的是不使用
Enumerable.OrderBy
方法,因此真正的实现甚至不会有两个通用参数。
 result.OrderBy<Todo,string>(String.Format("it. {0} {1}", sort, desc ? "DESC" : "ASC"))
result.OrderBy(String.Format("it. {0} {1}", sort, desc ? "DESC" : "ASC"))