【问题标题】:Problem with order by in LINQLINQ中的排序问题
【发布时间】:2010-04-06 13:43:02
【问题描述】:

我正在从控制器传递一个由下一个代码生成的数组:

public ActionResult GetClasses(bool ajax, string kingdom)
        {
            int _kingdom = _taxon.getKingdom(kingdom);

            var query = (from c in vwAnimalsTaxon.All()
                         orderby c.ClaName
                         select new { taxRecID = c.ClaRecID, taxName = c.ClaName }).Distinct();

            return Json(query, JsonRequestBehavior.AllowGet);
        }

查询List应该是有序的,但是它不起作用,我在数组中得到排序错误的类的名称,因为我已经看到它调试名称没有排序。视图只是一个下拉框自动加载,所以我几乎可以肯定问题出在操作上。你看出什么不对了吗?我是不是漏掉了什么?

【问题讨论】:

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


    【解决方案1】:

    我认为 gmcalab 差不多了。它不起作用的原因是 Distinct 吹走了订购。所以你需要 Distinct THEN OrderBy。但这意味着您必须按新属性名称排序:

    var query = (from c in vwAnimalsTaxon.All()
        select new { taxRecID = c.ClaRecID, taxName = c.ClaName }
    ).Distinct().OrderBy(t => t.taxName); 
    

    【讨论】:

    • 是的,就是这样,我不知道会发生这种情况,虽然我怀疑了一些东西,但我不知道如何将 orderby 作为一种方法...谢谢
    【解决方案2】:

    试试这个:

    var query = (from c in vwAnimalsTaxon.All()
                 select new { taxRecID = c.ClaRecID, taxName = c.ClaName }
    ).Distinct().OrdeyBy(c => c.ClaName);
    

    【讨论】:

    • 谢谢,它可以工作,虽然在 orderBy 方法中应该是 c => t.taxName 而不是 c.ClaName :D
    【解决方案3】:

    在 LINQ 中,Distinct 方法不保证结果的顺序。在许多情况下, Distinct 会导致 OrderBy 方法被优化掉。所以有必要在 Distinct 之后最后做 OrderBy。

    var query = (from c in vwAnimalsTaxon.All()
                 select new { taxRecID = c.ClaRecID, taxName = c.ClaName })
                .Distinct()
                .OrderBy(c => c.ClaName);
    

    【讨论】:

      【解决方案4】:

      选择也将消除排序。所以无论是 Distinct 还是 Select 都需要 orderby after。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-28
        • 1970-01-01
        • 2011-07-31
        • 2021-06-05
        • 1970-01-01
        相关资源
        最近更新 更多