ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

Windows Azure でのorder by について

以前の記事Windows Azureの開発環境に載せたASP.NET MVC 3 で、テーブルストレージからデータを取得して
降順にソートしようとしました。

ですがテーブルストレージでは、OrderByなどの集合関数は使用できないようです
複数のパーティションに分散してデータを保持することがあるため、それらをソートすることはできないようだ。
(大体あっているはず・・・)

降順にソートしたい場合に対応方法として
WINDOWS AZUREテーブルの「8.1 最新の項目を取得する (降順のシミュレーション) 」では
1.降順にソートする項目をあらかじめRowKeyに含めておく
2.降順になるように保存する値を工夫する
ことが書かれてますが、実際の開発に用いることを考えると納得できません。

理由としては
1.一覧画面などで一項目を昇順、降順の両方を行う場合がある
2.データ設計、実装が終わった後、新たに別項目でソートしたいという要求がでたらどうするのか
 (システムの保守、運用が始まれば追加要求はよくあること)
があります。

なので、テーブルストレージにおいてRowKeyに含まない項目をOrderByする方向で実装してみました。
以下、実装例です。

◆テーブルストレージからの取得
f:id:UnderSourceCode:20130504104101j:plain
まずはテーブルストレージから取得する箇所です。LINQを使用し、テーブルのデータを全件取得しています。
ここではソートは行いません。

◆取得したデータの編集、表示
f:id:UnderSourceCode:20130504104113j:plain
ASP.NET MVC のコントローラーのソースです。
18行目で上のデータを取得するSelect()を呼び出します。
22〜25行目で取得したデータに対して再びLINQを使い、orderby descendingで降順にしています。
ついでにTake(N)で先頭から5行だけ取り出しています。
データを表示する形式に編集した後は、26行目でreturn View()して画面に表示です。