2010-12-17 1 views
0

私は次の2つの呼び出しを持っていますが、どちらも同じですが結果は異なります...EF4のOrderBy Linq拡張機能で何が問題になっていますか?

ローカルデータベースに接続している単純なコンソールアプリケーションです。

DBContext db = new DBContext(); 

予想通り、この1種類、

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

しかし、なぜ私が[並べ替え文の順序を変更する場合はこの1つは国番号

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

によって市、それだけの種類によってソートしません、 Last OrderByのみが正しく動作するように見えますが、中間OrderByはまったく影響しません。このバグはEFまたはLinq拡張ですか?

私はクエリの書き換えに問題はありませんが、OrderBy Linq Extensionメソッドの何が問題なのかを知りたいのですか?

答えて

4

私はこのことについてブログ記事を持っている:http://www.kristofclaes.be/blog/2010/07/06/order-on-multiple-fields-with-linq/

問題は、第二OrderBy()は最初のものを覆すということです。これを修正するには、このようなThenBy()で二OrderBy()を置き換えることができます。

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

これは単なる無知のためです。私はMSDNを読んでいませんでした。私はそれがうまくいくと思っていました:) –

+0

うれしい私は偽の仮定をした唯一の人ではありません:-) –

1

変更ThenByへの第二のOrderByを。

関連する問題