LINQ中的订单问题

时间:2010-04-06 13:43:02

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

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

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 个答案:

答案 0 :(得分:10)

我认为gmcalab几乎就在那里。它不起作用的原因是Distinct打破了订购。因此,您需要与订单区分开来。但这意味着您必须按新属性名称排序:

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

答案 1 :(得分:2)

尝试一下:

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

选择也会吹掉排序。因此,Distinct或Select需要在之后订购。