【问题标题】:What is wrong with OrderBy Linq Extension in EF4?EF4 中的 OrderBy Linq 扩展有什么问题?
【发布时间】:2010-12-17 20:13:01
【问题描述】:

我有以下两个电话,都一样,但结果不同...

这是一个连接本地数据库的简单控制台应用程序。

DBContext db = new DBContext();

这个排序符合预期,

var q = from x in db.Cities
        orderby x.CountryCode, x.City
        select x;

foreach(var x in q){
   Console.WriteLine("{0}:{1}",x.CountryCode, x.City);
}

但是为什么这个不按 City 排序,它只按 CountryCode 排序

foreach(var x in db.Cities.OrderBy(d=>d.City).OrderBy(d=>d.CountryCode)){
   Console.WriteLine("{0}:{1}",x.CountryCode, x.City);
}

如果我更改 OrderBy 语句的顺序,那么只有 Last OrderBy 似乎可以正常工作,但中间的 OrderBy 完全没有影响。这是 EF 或 Linq 扩展中的错误吗?

我在重写查询方面没有问题,但我想知道 OrderBy Linq Extension 方法有什么问题?

【问题讨论】:

    标签: .net-4.0 entity-framework-4 linq-to-entities


    【解决方案1】:

    我有一篇关于此的博文:http://www.kristofclaes.be/blog/2010/07/06/order-on-multiple-fields-with-linq/

    问题是第二个OrderBy() 推翻了第一个。要解决此问题,您可以将第二个 OrderBy() 替换为 ThenBy(),如下所示:

    db.Cities.OrderBy(d=>d.City).ThenBy(d=>d.CountryCode)
    

    【讨论】:

    • 好吧,这只是因为无知,我没有阅读 MSDN,我只是认为它应该可以工作:)
    • 很高兴我不是唯一一个做出这种错误假设的人 :-)
    【解决方案2】:

    将第二个 OrderBy 更改为 ThenBy。

    【讨论】:

      猜你喜欢
      • 2020-12-24
      • 2011-08-29
      • 1970-01-01
      • 2020-04-30
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多