我刚开始使用RavenDb。 我想模拟火车时间表。现实世界中每列火车都是这样描述的。
Train no: 123
Reda 07:00
Gdynia 07:30
Sopot 08:00
Train no: 555
Reda 08:00
Gdynia 08:30
Sopot 09:00
Train no: 666
Reda 08:00
Wejherowo 09:00
我想查询访问A站的火车(不必从该站开始)然后前往B站(不必完成它在那里运行)并且不要在08:00之前离开A站。因此,对于上面的时间表,如果我在08:00从Reda
到Gdynia
要求火车,我会得到555号火车。相同如果我要求从Reda
到Sopot
的火车08:00。但我不应该接收火车666。
我在代码中将它建模为这样。
public class Train
{
public string Id { get; set; }
public string Number { get; set; }
public string Description { get; set; }
public ICollection<Station> Stations { get; set; }
public Train()
{
Stations = new List<Station>();
}
}
public class Station
{
public string Name { get; set; }
public string DepartFrom { get; set; }
}
我第一次尝试查询它是:
using (var documentStore = new DocumentStore { Url = "http://localhost:8080" })
{
documentStore.Initialize();
var session = documentStore.OpenSession();
var found = from train in session.Query<Train>()
where train.Stations.Any(s => s.Name == from)
&& train.Stations.Any(s => s.Name == to)
select train;
}
但&amp;&amp;不适用于嵌套集合。我发现只有||工作,这是因为Lucene的工作原理。我还发现here有Intersect方法应该允许我创建我想要的查询,但我无法在任何地方找到该扩展方法(我正在使用RavenDB Stable v1.0 build 992)。有什么办法,我必须创建索引?怎么看?