我想检索一个文档,如果其中一个集合中有一个带有特定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)
这是一个错误还是我做错了?
答案 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;示例显示那里。