2012-09-12 78 views
0

我正在爲RavenDB中的某些數據結構創建自定義數據服務提供程序。在OdataQueryOpeation中過濾

我使用ODataContext從WCF數據服務工具包,並有查詢工作像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,它的值爲:it =>(it.ReleaseYear == 2012)。我嘗試了下面的代碼,但'表達式'的值爲空。

Expression<Func<Movie, bool>> expression = operation.FilterExpression as Expression<Func<Movie, bool>>; 
query = _session.Query<Movie>().Where(expression); 

和查詢從瀏覽器發射低於:

HTTP:///oDataService.svc/Movies $過濾= ReleaseYear EQ 2012

回答

1

如果你想獲得實際的表達你可以嘗試以下

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

這會給一個類型的Expression<Func<Movie,bool>>,您可以用與IQueryable的直接使用。

query = _session.Query<Movie>().Where(where);