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を出発しない列車をクエリしたいと思います。したがって、上記の時刻表で から までの列車Reda
をGdynia
08:00 に尋ねると、555 番の列車が表示Reda
さSopot
れます。しかし、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 を使用しています)。それを行う方法は何ですか?また、インデックスを作成する必要がありますか? どのように見えるべきですか?