查询嵌套集合的问题

时间:2012-12-29 20:37:12

标签: ravendb

我刚开始使用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从RedaGdynia要求火车,我会得到555号火车。相同如果我要求从RedaSopot的火车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)。有什么办法,我必须创建索引?怎么看?

0 个答案:

没有答案