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" 示例相似。
我想检索一个文档,如果它的一个集合中有一个带有特定 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" 示例相似。