WCF Data Servicesの新機能 – カウント

WCF Data Servicesの新機能2)カウントをご紹介します。(2/24に実施されたTechDaysセッションのフォローアップも兼ねています)

このシリーズの目次は以下になります。
1) WCF Data Servicesの新機能 – 射影
2) WCF Data Servicesの新機能 – カウント
3) WCF Data Servicesの新機能 – Server Driven Paging(SDP)
4) WCF Data Servicesの新機能 – Feed Customization
5) WCF Data Servicesの新機能 – データバインド
6) WCF Data Servicesの新機能 – カスタムプロバイダ1
7) WCF Data Servicesの新機能 – カスタムプロバイダ2
8) WCF Data Servicesの新機能 – リクエストパイプライン
9)Open Data Protocolの実装 – Share Point Server 2010のデータを操作する

また以下のトピックに関しては前回の記事を参照してください。
■名称の変更
■新バージョン
■更新モジュール(開発環境)
■今回の説明で使用するDataService

■カウント(サービスとして)
非常に単純でして、今回からサーバーサイドでデータの件数の取得が出来るようになりました。
以下のようにリクエストします。

https://localhost:25872/pubsDataService.svc/employee/$count

以下が結果です、値そのものの取得が可能になっています。employeeテーブルには43件のデータが存在していることが分かります。

image

以下の様にfilterと組み合わせて使用することも可能です。

https://localhost:25872/pubsDataService.svc/employee/$count?$filter=job_id eq 10

また、InlineCountといって、データの中にカウントを含めるには以下のように指定を行います。

https://localhost:25872/pubsDataService.svc/employee?$inlinecount=allpages

その結果以下の赤枠部分が追加されたデータを取得することが出来ます。

image 

■カウント(クライアントでの取得)
.NET Frameworkを使用したクライアントプログラムでカウントを取得することが可能です。
以下のコードでInlineCount+filterを加味したカウントの取得が可能です。

var query = (from c in context.employee.IncludeTotalCount()                    where c.job_id ==10                    select c) as DataServiceQuery<employee>;

var results = query.Execute() as QueryOperationResponse<employee>;

Console.WriteLine(results.TotalCount);

また、以下の手法(LongCount、あるいはCount)でもカウントの取得が可能です。ただしこの手法は、Silverlightクライアントではサポートされていません。

var query = (from c in context.employee select c) as DataServiceQuery<employee>;

Console.WriteLine(query.LongCount());