RavenDBにあるいくつかのデータ構造用のカスタムデータサービスプロバイダーを作成しています。
WCF Data Service ToolkitのODataContextを使用しており、クエリの一部がTOP/SKIPなどのように機能しています。
public IEnumerable<Movie> GetAll(ODataQueryOperation operation)
{
IQueryable<Movie> query;
if (operation.TopCount != 0)
query = _session.Query<Movie>().Skip(operation.SkipCount).Take(operation.TopCount);
}
このコードは次のようなクエリをサポートします:
http://<url>/oDataService.svc/Movies?$top=2
しかし、フィルタリングを機能させることはできません。
operation.FilterExpressionにはtype-expressionがあり、value:it =>(it.ReleaseYear == 2012)があります。以下のコードを試しましたが、'expression'の値がnullになります。
Expression<Func<Movie, bool>> expression = operation.FilterExpression as Expression<Func<Movie, bool>>;
query = _session.Query<Movie>().Where(expression);
そして、ブラウザから起動されたクエリは以下のとおりです。
http:///oDataService.svc/Movies?$filter = ReleaseYear eq 2012