【问题标题】:Getting error when trying to order by in LINQ尝试在 LINQ 中订购时出错
【发布时间】:2017-04-06 15:51:15
【问题描述】:

我已经在我的 .NET MVC 应用程序中实现了自定义分页,如下面的代码所示:

var draw = Request.Form.GetValues("draw").FirstOrDefault();
var start = Request.Form.GetValues("start").FirstOrDefault();
var length = Request.Form.GetValues("length").FirstOrDefault();
var sortColumn = Request.Form.GetValues("columns[" + Request.Form.GetValues("order[0][column]").FirstOrDefault() + "][name]").FirstOrDefault();
var sortColumnDir = Request.Form.GetValues("order[0][dir]").FirstOrDefault();
int pageSize = length != null ? Convert.ToInt32(length) : 0;
int skip = start != null ? Convert.ToInt32(start) : 0;
int totalRecords = 0;
using (var ctx = new myContext())
{
var v = ctx.zsp_select_allusers().ToList();
if(!string.IsNullOrEmpty(sortColumn) && string.IsNullOrEmpty(sortColumnDir))
{
v = v.OrderBy(sortColumn + " " + sortColumnDir);
}
totalRecords = v.Count();
var data = v.Skip(skip).Take(pageSize).ToList();
return Json(new { draw=draw, recordsFiltered = totalRecords, recordsTotal = totalRecords, data = data },JsonRequestBehavior.AllowGet);
}

实现的自定义分页工作正常,但我在这行代码中遇到错误:

  v = v.OrderBy(sortColumn + " " + sortColumnDir);

上面写着:

the type argument for method Enumerable.OrderBy(... )cannot be inferred

我在这里做错了什么?

【问题讨论】:

标签: c# asp.net asp.net-mvc asp.net-mvc-5 datatables


【解决方案1】:

使用 .NET 内置库提供的 LINQ 运算符,您需要构造一个 Expression<Func<,>> 以传递给 OrderByOrderByDescending

要基于运行时提供的字符串构建动态查询,您可能应该查看像DynamicLinq 这样的库,其中will allow you to sort by a string like "someColumnName descending"

【讨论】:

    【解决方案2】:

    正如 Will 提到的,OrderBy 的参数为 Func<T,R> - 假设您在 v 中的用户列表(顺便说一句,这是一个相当糟糕的变量名),具有名为 name 的属性em> 和 dir,你可以这样做:

    v.OrderBy(x => x.name).ThenBy(x => x.dir)
    

    【讨论】:

    • 其实我觉得你需要根据dir的值来切换OrderByOrderByDescending。他的名字是他想要排序的列/字段的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    相关资源
    最近更新 更多