2013-05-02 111 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();