Ravendb 根据文档属性集合中的匹配Id选择文档

Ravendb 根据文档属性集合中的匹配Id选择文档,ravendb,Ravendb,我想检索一个文档,如果它的一个集合中有一个具有特定Id的项。这是我的疑问: var query = from x in session.Query<MailPackageLog>() where x.Package != null where ((x.Package.To != null && x.Package.To.Select(y => y.Id).Contains(recipientId))

我想检索一个文档,如果它的一个集合中有一个具有特定Id的项。这是我的疑问:

var query = from x in session.Query<MailPackageLog>()
            where x.Package != null
            where ((x.Package.To != null && x.Package.To.Select(y => y.Id).Contains(recipientId))
            || (x.Package.Cc != null && x.Package.Cc.Select(y => y.Id).Contains(recipientId))
            || (x.Package.Bcc != null && x.Package.Bcc.Select(y => y.Id).Contains(recipientId)))
            select x;

query = query.Customize(x => x.WaitForNonStaleResultsAsOfNow(Settings.Default.DocumentStoreQueryTimeout));

return query.FirstOrDefault();
但是当它运行时,我得到了这个异常:

System.InvalidOperationException:无法理解如何翻译 x、 Package.To.Selecty=>y.Id

这是一个bug还是我做错了?

而不是:

x.Package.To.Select(y => y.Id).Contains(recipientId)
试试这个:

x.Package.To.Any(y => y.Id == recipientId)
从语义上讲,它们是相同的,但是Raven可能更容易翻译第二个


您可能还希望查看类似于Where+的任何示例。

LINQ的缺点是同一查询可以在一个系统上工作,但不能在另一个系统上工作。例如,我知道我原来的查询可以使用EF/SQL工作,但好的是,总是有另一种LINQy方法来完成相同的事情。谢谢