RavenDb:查找演员X未出演的电影
我是RavenDb的新手,遇到了以下问题,在SQL数据库中很容易解决,但在RavenDb中却不那么容易(看起来) 考虑到我的课程:RavenDb:查找演员X未出演的电影,ravendb,Ravendb,我是RavenDb的新手,遇到了以下问题,在SQL数据库中很容易解决,但在RavenDb中却不那么容易(看起来) 考虑到我的课程: //document collection public class Movie { public string Id { get; set; } public string Title { get; set; } public List<MovieActor> Actors { get; set; } } public cla
//document collection
public class Movie
{
public string Id { get; set; }
public string Title { get; set; }
public List<MovieActor> Actors { get; set; }
}
public class MovieActor
{
public string ActorId { get; set; }
public string CharacterName { get; set; }
public DateTime FirstAppearance { get; set; }
}
//document collection
public class Actor
{
public string Id { get; set; }
public string Name { get; set; }
}
有人知道如何在RavenDb以正确的方式实现这一点吗 使用我博客文章中描述的方法: 您可以使用Actorid数组创建索引:
public class Movies_ByActor : AbstractIndexCreationTask<Movie>
{
public Movies_ByActor()
{
Map = movies => from s in movies
select new
{
Actors = s.Actors.Select(x => x.ActorId)
};
}
public class ActorsInMovie
{
public object[] Actors { get; set; }
}
}
公共类电影\u演员:AbstractIndexCreationTask
{
公共电影
{
Map=电影=>来自电影中的
选择新的
{
Actors=s.Actors.Select(x=>x.ActorId)
};
}
公共类ActorsInMovie
{
公共对象[]参与者{get;set;}
}
}
然后,您可以搜索电影中不包含所需演员的位置:
var result = session.Query<Movies_ByActor.ActorsInMovie, Movies_ByActor>()
.Where(x => x.Actors != (object)"actors/1")
.As<Movie>();
var result=session.Query()
其中(x=>x.Actors!=(对象)“Actors/1”)
.As();
由于我们查询的对象与结果不同,我们需要将指定为,以告诉RavenDB实际返回的对象的类型
工作示例:并不是说我对Lenoardo DiCaprio有任何反对意见(a,谢谢=)这很有效,并帮助我理解了更多。只是,我必须将查询的.Where部分更改为:x=>!x、 Actors.Contains((对象)“Actors/1”))
System.InvalidOperationException: Cannot process negated Any(), see RavenDB-732 http://issues.hibernatingrhinos.com/issue/RavenDB-732
public class Movies_ByActor : AbstractIndexCreationTask<Movie>
{
public Movies_ByActor()
{
Map = movies => from s in movies
select new
{
Actors = s.Actors.Select(x => x.ActorId)
};
}
public class ActorsInMovie
{
public object[] Actors { get; set; }
}
}
var result = session.Query<Movies_ByActor.ActorsInMovie, Movies_ByActor>()
.Where(x => x.Actors != (object)"actors/1")
.As<Movie>();