我在.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
我在这里做错了什么?
答案 0 :(得分:1)
正如将提到的那样,OrderBy
为其参数选择Func<T,R>
- 假设v
中的用户列表(这是一个相当糟糕的变量名称,顺便说一句),具有调用的属性名称和 dir ,您可以这样做:
v.OrderBy(x => x.name).ThenBy(x => x.dir)
答案 1 :(得分:1)
使用.NET附加库提供的LINQ运算符,您需要构造Expression<Func<,>>
以传递到OrderBy
或OrderByDescending
。
为了根据运行时提供的字符串构建动态查询,您应该查看DynamicLinq
之类的库,will allow you to sort by a string like "someColumnName descending"
。