【发布时间】:2015-07-22 12:42:13
【问题描述】:
所以我使用了一个 RavenDB 数据库,它包含两个不同的集合来将图片对象存储为文档。第一个集合名为 Pictures,第二个集合名为 DeletedPictures。
在此应用程序中,用户可以删除自己的图片。然后将删除的图片对象放入第二个集合 DeletedPictures。我通过更改 RavenDB 文档元数据来做到这一点:
Session.Advanced.GetMetadataFor(picture)[Constants.RavenEntityName] = "DeletedPictures";
我在进行查询以从 DeletedPictures 集合中检索文档时遇到问题。
目前我正在使用两个利用 Linq 查询来检索图片文档的函数,一个用于检索所有已删除的图片;
public IEnumerable<Picture> RetrieveAllDeleted()
{
var allDeletedPictures = Session.Query<Picture>()
.AsEnumerable()
.Where(p => Session.Advanced.GetMetadataFor(p)
.Value<string>("Raven-Entity-Name") == "DeletedPictures");
return allDeletedPictures;
}
还有一个用于检索特定用户的所有已删除图片;
public IEnumerable<Picture> RetrieveAllDeletedOfUser(int userId)
{
var allDeletedPicturesOfUser = Session.Query<Picture>()
.Where(p => p.Owner == userId)
.AsEnumerable()
.Where(p => Session.Advanced.GetMetadataFor(p)
.Value<string>("Raven-Entity-Name") == "DeletedPictures");
return allDeletedPicturesOfUser;
}
发现我必须在我的 Linq 链中使用 .AsEnumerable() 否则我会收到错误:
无法理解如何翻译值 Session.Advanced.GetMetadataFor(p).Value("Raven-Entity-Name")
假设 Pictures 集合包含 2 个文档,DeletedPictures 集合包含 6 个文档(用户与所有者相同的图片)。
第一个函数返回一个空列表,这是错误的,因为它应该返回 6 个文档。 (所有已删除的图片)
第二个函数返回一个包含 6 个项目的列表,所以这个似乎工作正常。
我的查询有什么问题?
【问题讨论】:
-
尝试:删除 System.LINQ 命名空间,然后删除 .AsEnumerable(),然后将一个子句中的 'Where' 与第二个查询中的 '&&' 运算符结合起来。你得到了什么?