在LINQ中尝试排序时出错

时间:2017-04-06 15:51:16

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

我在.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

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

使用.NET附加库提供的LINQ运算符,您需要构造Expression<Func<,>>以传递到OrderByOrderByDescending

为了根据运行时提供的字符串构建动态查询,您应该查看DynamicLinq之类的库,will allow you to sort by a string like "someColumnName descending"