如何在MVC4中使用Dynamic LINQ?

时间:2014-02-25 05:35:35

标签: c# linq asp.net-mvc-4 dynamic-linq

这是我的MVC4应用程序的“视图”中的默认操作。

public ActionResult Index(string sort = "R_ResDate", 
                          string sortdir = "DESC", 
                          int page = 1)
{
    List<Result> results = modRes.Results.ToList();

    var results = from r in results
                  orderby r.R_ResultDate descending
                  select r;

    return View(results);
}

其中modRes是Model类,

我想在动态linq中使用sort列,sortDir和page参数来派生结果。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:-1)

您可以使用此代码进行分页和排序数据:

var p = Expression.Parameter(typeof(Model));
var sortByFunc = Expression.Lambda<Func<Model, object>>(Expression.TypeAs(Expression.Property(p, sortByKey), typeof(object)), p).Compile();

var items = from r in modRes.Results
            orderby r.R_ResultDate descending
            select r;
var orderedItems = sortByAsc 
      ? items.OrderBy(sortByFunc) 
      : items.OrderByDescending(sortByFunc);
var results = orderedItems.Skip((pageIndex - 1) * pageSize).Take(pageSize);

return View(results);

另外,你不应该在ToList查询上调用modRes.Results方法,因为在这种情况下,当只加载一页的数据时,将加载所有数据。