2016-01-18 84 views
1

我試圖從遷移EF此查詢使用查詢,似乎那裏沒有辦法表達嵌套子句ravendb多個嵌套其中ravendb

DateTime interval; 
IList<string> excludedUserNames; 

return this.ravenSession.Query<User>() 
    .Where(u => 
     u.NotifyOnNewForumPost 
     && (u.LastForumsNotification < u.LastVisit || u.LastForumsNotification < interval)) 
    .Select(u => u.Email) 
    .ToList(); 

,所以我看着DocumentQuery,但顯然條款lucene不支持比較文檔中的兩個值。

我是否錯過了文檔中的某些東西(它似乎只處理簡單的過濾?!),還是有另一種方法來解決這個問題(除了在內存中過濾)?

回答

0

在查詢期間,您無法比較RavenDB中的兩個值。您無法這樣做的原因是,這需要數據庫引擎掃描所有文檔以查找匹配項。 相反,創建一個可以在索引時進行比較的索引,並查詢結果。

0

Raven不支持.Contains(u.UserName)。你也許能夠使用.In(...)代替:

return this.ravenSession.Query<User>() 
    .Where(u => 
     u.NotifyOnNewForumPost 
     && (u.LastForumsNotification < u.LastVisit || u.LastForumsNotification < interval) 
     && !u.UserName.In(excludedUserNames)) 
    .Select(u => u.Email) 
    .ToList(); 

希望這有助於!

+0

謝謝,這也是一個問題,已經明白了。 where子句的問題依然不幸。我會更新這個問題以避免混淆。 – mgreuel

+0

這種查詢應該可以工作。你得到的錯誤是什麼? –