我正在尝试对来自Generic List
对象的数据进行排序
通过使用以下代码,我可以根据Title
列对数据进行排序
但我想做的是我想根据名为sidx
的参数值对数据进行排序。
public ActionResult ListingGridData(string sidx, string sord, int page, int rows)
{
int currentPage = Convert.ToInt32(page) - 1;
int totalRecords = 0;
var SeminarList = (List<Seminar>)null;
if(sord.Equals("asc"))
SeminarList = seminarRepository.AllSeminarList().Seminar_Masters
.OrderBy(x => x.Title )
.Skip(currentPage * rows)
.Take(rows)
.ToList();
else
SeminarList = seminarRepository.AllSeminarList().Seminar_Masters
.OrderByDescending(x => x.Title)
.Skip(currentPage * rows)
.Take(rows)
.ToList();
totalRecords = seminarRepository.AllSeminarList().Seminar_Masters.Count;
var totalPages = (int)Math.Ceiling((float)totalRecords / (float)rows);
....
}
所以我修改了我的代码,但它不起作用 它并没有像我预期的那样排序。
SeminarList = seminarRepository.AllSeminarList().Seminar_Masters
.OrderBy(x => sidx)
.Skip(currentPage * rows)
.Take(rows)
.ToList();
我现在使用的对象是纯List
对象,而不是IQueryable
对象。
至于排序目的,我不想回到SQL select statement
,我想在Controller层对数据进行排序。
请让我得到任何建议。
答案 0 :(得分:2)
您必须按结果集中的列进行排序。如果sidx不是结果集的一部分,那么就像通过常量排序一样。因此,每一行都是相同的,并且不会真正订购。假设sidx的值为10,那么就像对这个结果集进行排序一样:
Row 1 | 10
Row 2 | 10
Row 3 | 10
...
您可以看到排序如何毫无意义
您需要做的是将sidx添加到结果集中,如果这是您想要的:
SeminarList = seminarRepository.AllSeminarList().Seminar_Masters
.OrderBy(x => x.sidx)
.Skip(currentPage * rows)
.Take(rows)
.ToList();
答案 1 :(得分:1)
使用一些帮助程序查看动态where和orderby的答案 方法在这里 where can I find a good example of using linq & lambda expressions to generate dynamic where and orderby sql?
答案 2 :(得分:1)
所以你说调用方法会通过sidx
参数提供一个属性名称,你想要按该属性排序吗?
最简单的方法是使用Dynamic LINQ library。另一个选择是使用反射来查找你正在寻找的属性,然后从中构建一个lambda表达式。