【问题标题】:Generic List Object OrderBy dynamic Column name通用列表对象 OrderBy 动态列名
【发布时间】:2012-03-26 12:14:09
【问题描述】:

我正在尝试对来自 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层对数据进行排序。

请给我任何建议。

【问题讨论】:

    标签: c# asp.net-mvc generics sorting


    【解决方案1】:

    您必须按结果集中的列排序。如果 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();
    

    【讨论】:

      【解决方案2】:

      使用一些帮助器查看动态位置和顺序的答案 方法在这里 where can I find a good example of using linq & lambda expressions to generate dynamic where and orderby sql?

      【讨论】:

        【解决方案3】:

        所以您是说调用方法将通过sidx 参数提供一个属性名称,并且您想按该属性排序?

        最简单的方法是使用Dynamic LINQ library。另一种选择是使用反射来查找您要查找的属性,然后从中构建一个 lambda 表达式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-19
          • 2014-09-18
          • 1970-01-01
          相关资源
          最近更新 更多