我尝试将此查询从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不支持比较文档中的两个值。
我是否遗漏了文档中的内容(它似乎只处理简单的过滤?!),还是有另一种方法(除了在内存中过滤)?
答案 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中的两个值。您无法做到这一点的原因是,这需要数据库引擎扫描所有文档以查找匹配项。 相反,创建一个索引,在索引时进行比较,并查询结果。