EF4中的OrderBy Linq扩展有什么问题?

时间:2010-12-17 12:07:41

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

我跟随两个电话,两个都是相同但结果不同......

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

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

但是为什么这个不按城市排序,它只按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方法有什么问题?

2 个答案:

答案 0 :(得分:4)

我有一篇关于此事的博文: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) ,如下所示:

{{1}}

答案 1 :(得分:1)

将第二个OrderBy更改为ThenBy。