我跟随两个电话,两个都是相同但结果不同......
这是一个简单的控制台应用程序,可以连接到本地数据库。
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方法有什么问题?
答案 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。