0

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

4

1 に答える 1

1

実際の式を取得したい場合は、次のことを試すことができます

var where = (operation.FilterExpression as UnaryExpression).Operand as Expression<Func<Movie, bool>>

Expression<Func<Movie,bool>>これにより、IQueryableで直接使用できるタイプが提供されます。

query = _session.Query<Movie>().Where(where);
于 2012-09-17T06:55:32.833 に答える