2010-04-06 54 views
3

我從控制器由下面的代碼生成一個數組傳遞:問題的順序通過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); 
     } 

查詢列表,要責令,但它不工作,我得到的名字在數組中命令錯誤的類,因爲我已經看到它的調試名稱不是有序的。視圖只是一個自動加載的下拉框,所以我幾乎可以確定問題出在操作上。你有什麼不對嗎?我錯過了什麼嗎?

回答

10

我覺得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); 
+0

是的,就是這樣,我不知道這可能會發生,儘管我懷疑是什麼,但我不知道如何做orderby作爲一種方法...謝謝 – vikitor 2010-04-06 13:54:40

2

試試這個:

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

謝謝你,它的工作原理,雖然它應該是c => t.taxName而不是c.ClaName中的orderBy方法:D – vikitor 2010-04-06 13:55:32

1

在LINQ中,差別方法不保證結果的順序。在很多情況下,Distinct會導致OrderBy方法得到優化。所以有必要在Distinct之後最後執行OrderBy。

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

選擇也將吹走排序。因此,Distinct或Select需要按順序排列。