代码之家  ›  专栏  ›  技术社区  ›  vikitor

linq中的order by问题

  •  3
  • vikitor  · 技术社区  · 15 年前

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

    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);
            }
    

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

    4 回复  |  直到 12 年前
        1
  •  10
  •   grossvogel    15 年前

    我想gmcalab就快到了。它不起作用的原因是明显地破坏了命令。所以你需要不同的然后排序。但这意味着您必须按新属性名排序:

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

    尝试一下:

    var query = (from c in vwAnimalsTaxon.All()
                 select new { taxRecID = c.ClaRecID, taxName = c.ClaName }
    ).Distinct().OrdeyBy(c => c.ClaName);
    
        3
  •  1
  •   Anthony Faull    15 年前

    在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
  •  0
  •   ekenman    12 年前

    选择也会吹走排序。因此,distinct或select之后需要orderby。