LINQにおける複数の"order by"について

2つのテーブル、moviescategoriesがあり、最初にcategoryIDで、次にNameで順序付けられたリストを得ることができます。

ムービーテーブルには3つのカラム ID, Name, CategoryID があります。 カテゴリテーブルには、2つのカラムIDとNameがあります。

以下のようなことを試してみましたが、うまくいきませんでした。

var movies = _db.Movies.OrderBy( m => { m.CategoryID, m.Name })
ソリューション

これなら大丈夫でしょう。

var movies = _db.Movies.OrderBy(c => c.Category).ThenBy(n => n.Name)
解説 (17)

ラムダではない、クエリシンタックスのLINQを使えば、このようなことが可能になります。

var movies = from row in _db.Movies 
             orderby row.Category, row.Name
             select row;

[EDIT to address comment] ソート順を制御するには、キーワード ascending (これはデフォルトなので特に有用ではありません) または descending を使用して、次のようにします。

var movies = from row in _db.Movies 
             orderby row.Category descending, row.Name
             select row;
解説 (4)

new "を追加。

var movies = _db.Movies.OrderBy( m => new { m.CategoryID, m.Name })

これは私のマシンでは動作します。ソートに使用できるものを返します。これは2つの値を持つオブジェクトを返します。

次のように、組み合わせた列でソートするのと似ていますが、違います。

var movies = _db.Movies.OrderBy( m => (m.CategoryID.ToString() + m.Name))
解説 (12)