1

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を出発しない列車をクエリしたいと思います。したがって、上記の時刻表で から までの列車RedaGdynia08:00 に尋ねると、555 番の列車が表示RedaSopotれます。しかし、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;
}

ただし、&& はネストされたコレクションでは機能しません。|| だけだとわかりました。これは Lucene の仕組みによるものです。また、必要なクエリを作成できる Intersect メソッドがあることもわかりましが、その拡張メソッドがどこにも見つかりません (RavenDB Stable v1.0 ビルド 992 を使用しています)。それを行う方法は何ですか?また、インデックスを作成する必要がありますか? どのように見えるべきですか?

4

0 に答える 0