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

时间:2015-04-06 15:01:20

标签: 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))
            || (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.Select(y =&gt; y.Id)

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

1 个答案:

答案 0 :(得分:2)

而不是:

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

试试这个:

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

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

您可能还希望查看"Filtering" section of the RavenDB documentation.这类似于&#34; Where + Any&#34;示例显示那里。