mongoDBでASP.NETのGridViewのソートとページングを試してみる
先日のVSUGとこちらのブログで@onosさんが紹介されている
ASP.NETの新しい機能がとっても良さそうだったので
mongoDBでもやってみました。
Memberクラスを作成します
public class Member { public int Id { get; set; } public string Name { get; set; } public string Mail { get; set; } }
あっとMongoDriverをNuGetでインストールしておきましょう
install-package mongocsharpdriver
適当にデータを登録しておきます。
mongoDBからデータを取得します。
IQueryable
protected IQueryable<Member> SelectMembers() { MongoDatabase db = new MongoClient( "mongodb://127.0.0.1" ). GetServer().GetDatabase( "aspnet_sample" ); MongoCollection<Member> collection = db.GetCollection<Member>( "members" ); return collection.AsQueryable(); }
GridViewを配置してSelectMethodに上記で作成したSelectMembersを設定します。
<form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server"SelectMethod="SelectMembers"></asp:GridView> </div> </form>
実行します。
全件表示されました。
次にソートとページングの設定を加えます。
件数が少ないのでページサイズを3にしておきます。
<form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" SelectMethod="SelectMembers" AllowSorting="true" AllowPaging="true" PageSize="3"></asp:GridView> </div> </form>
@onosさんのブログでは、ここで例外になっていましたが
こちらはうまく行ってしまいました。はて?
MongoDriverのソースを見てみるとMongoQueryable
例外にならないんですね~ なるほど!
public class MongoQueryable<T> : IOrderedQueryable<T>
ページングしてみます。
ソートしてみます。
どちらも出来てますね。すばらしい!
こんなに簡単にソートとページングが出来るなんて!
ここで疑問なのは、どこでソートとか処理してるのって話ですね
全件取得してクライアント側でやってる?
まあそれは無いよね。でも一応、見てみる。
大丈夫そうですね。(当たり前ですかね
送信情報も確認してみましょう
はいちゃんと呼んでますね
mongoDBのログも見てみましょう
ページング
Countしてますね。これは総件数でも取ってるのかな?
SkipとかTake的なものが無い感じ?
でも何故か3件しか返してないですね。
全件取るとこんなログになる
あえてSkipとTakeを入れるとこんな感じ
ちゃんとSkipとLimit(LINQではTakeだけど)されてますね~
ちょっと分からないですね
ソート
こちらは、想定通りにログが出てますね
ちょっとmongoDBのログの見方が分かっていないので微妙なところもありますが
ASP.NETのソートとページングは、当たり前ですがちゃんとDBから取得してるってことですかね
まあmongoDBでもちゃんと出来ましたよって話でした!