。在Linq查询中的订单并不总是正确排序

时间:2013-05-02 21:50:56

标签: c# asp.net-mvc-3 linq entity-framework-4.1

下面是我在ASP MVC 3控制器中使用的Linq查询,尝试按状态代码按字母顺序排序结果。 99%的时间这个工作得很好,但我找到了几个无序的列表

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();
}

1 个答案:

答案 0 :(得分:0)

由于OrderBy()位于foreach(banklist中的var bank)循环的内部,因此它将仅在每次迭代中运行时影响每个单独的查询。所有查询完成后,您需要一个OrderBy子句。

尝试这样的事情:

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