Что не так с расширением OrderBy Linq в EF4? - PullRequest
0 голосов
/ 17 декабря 2010

У меня два следующих вызова, оба одинаковые, но результаты разные ...

Это простое консольное приложение с подключением к локальной базе данных.

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 ]

4 голосов
/ 17 декабря 2010

У меня есть запись в блоге об этом: 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 голос
/ 17 декабря 2010

Измените второй OrderBy на ThenBy.

...