我从控制器传递下一个代码生成的数组:
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);
}
查询列表应该是有序的,但它不起作用,我得到数组中错误排序的类的名称,因为我看到它调试名称没有被排序。视图只是一个下拉框自动加载,所以我几乎可以肯定问题在于动作。你看错了吗?我错过了什么吗?
答案 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需要在之后订购。