多个嵌套在ravendb中的where子句

时间:2016-01-18 07:04:59

标签: ravendb

我尝试将此查询从EF迁移到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();

使用Query似乎无法表达嵌套子句,所以我查看了DocumentQuery,但显然lucene不支持比较文档中的两个值。

我是否遗漏了文档中的内容(它似乎只处理简单的过滤?!),还是有另一种方法(除了在内存中过滤)?

2 个答案:

答案 0 :(得分: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();

希望这有帮助!

答案 1 :(得分:0)

在查询期间无法比较RavenDB中的两个值。您无法做到这一点的原因是,这需要数据库引擎扫描所有文档以查找匹配项。 相反,创建一个索引,在索引时进行比较,并查询结果。