2013-05-02 59 views
2

下面是我在我的ASP MVC 3控制器中使用的Linq查詢,嘗試按狀態代碼按字母順序排列結果。這99%的時間工作得很好,但我發現,是無序的,像這樣.OrderBy在Linq查詢並不總是正確排序

enter image description here

爲此,我們在索引中列出每個銀行幾列,我需要從一個輔助表拉BankListAgentId並顯示我們與該特定銀行合作的所有代理商。大多數情況下,代理商都是按照州代碼進行適當排序的,但有時候他們會像上面的屏幕截圖一樣無序排列。

foreach (var bank in banklist) 
{ 
    bank.BankListAgentId = (from a in db.BankListAgentId 
          where a.BankID == bank.ID 
          select a).OrderBy(x => x.StateCode, StringComparer.CurrentCultureIgnoreCase).ToList(); 
}  

編輯

我試圖分離出操作成單獨的線,像這樣的,但得到了同樣的結果(99%正常有序,1%未)

foreach (var bank in banklist) 
{ 
    var agent = (from a in db.BankListAgentId 
       where a.BankID == bank.ID 
       select a).ToList(); 

    agent = agent.OrderBy(x => x.StateCode).ToList(); 

    bank.BankListAgentId = agent.ToList(); 
} 
+0

那麼上面的截圖是bank.BankListAgentId還是bank? – ysrb 2013-05-02 21:52:54

+0

可以肯定的是,我會使用db查詢,然後執行'OrderBy'並返回List。 – SimpleVar 2013-05-02 21:52:57

+0

@ysrb:它是'bank.BankListAgentID'。我在帖子中添加了更好的描述。 thx – NealR 2013-05-02 22:00:19

回答

0

由於您的OrderBy()位於foreach(銀行列表中的var bank)循環的內部,它將僅在每次迭代中運行時影響每個單獨的查詢。所有查詢完成後,您都需要一個OrderBy子句。

嘗試是這樣的,而不是:

banklist.SelectMany(銀行=> bank.BankListAgentId).OrderBy(A => a.StateCode,StringComparer.CurrentCultureIgnoreCase).ToList();