Select 文档基于文档 属性 集合中的匹配 ID

Select document based on matching Id in document property's collection

我想检索一个文档,如果它的一个集合中有一个带有特定 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: Cannot understand how to translate x.Package.To.Select(y => y.Id)

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

而不是:

x.Package.To.Select(y => y.Id).Contains(recipientId)

试试这个:

x.Package.To.Any(y => y.Id == recipientId)

它们在语义上是相同的,但 Raven 翻译第二个可能更容易。

您可能还希望查看 "Filtering" section of the RavenDB documentation. 这与此处显示的 "Where + Any" 示例相似。