3

ここで完全なテストケースを準備しました:https ://gist.github.com/pkrakowiak/cc8addf5725193a01f2d

書類がありLocationます。各場所には、特定の期間中に0人以上のスポンサーを含めることができます(プロパティで表されIList<Sponsorship> Sponsorsます)。特定の日(私の例では3月15日)にスポンサーされている場所のみを返す必要があります。Sponsorshipしたがって、そのような場所には、次のクエリに一致するインスタンスが少なくとも1つ必要です。.Where(x => x.Sponsors.Any(s => s.From <= today && s.To >= today))

2つのテストを準備しました。1つは明示的にインデックスを使用していません:CanGetCurrentlySponsoredLocations、もう1つは作成した静的インデックスを使用しています:CanGetCurrentlySponsoredLocationsUsingStaticIndex。最初のものは合格し、2番目のものは失敗します。問題は、2番目のテストに合格するにはどうすればよいですか?Locations_ByCoordinatesインデックスにどのような変更を加える必要がありますか?

インデックス名がどこから来たのか、レビューが何なのか疑問に思っている場合は、無視してください。:)それらは私がテストしていた他のものからの残り物です。

アップデート

私は最初にこの質問を公式のRavenDBGoogleグループに持ち込みました:https ://groups.google.com/forum/?fromgroups =#!topic / ravendb / ySUPXqkpTA8残念ながら、それは私に解決策をもたらしませんでした。

4

1 に答える 1

0

ユニットテストに合格する最も単純なインデックスは次のとおりです。

private class Locations_ByCoordinates : AbstractIndexCreationTask<Location>
{
    public Locations_ByCoordinates()
    {
        Map = locations => from l in locations
                           from s in l.Sponsors
                           select new
                           {
                               Sponsors_From = s.From,
                               Sponsors_To = s.To
                           };
    }
}

座標にはインデックスが付けられていないため、より適切な名前を選択することをお勧めします。

しかし、あなたの他のテストCanSortOnSponsorshipStatusが何であるかはわかりません。

アップデート

スポンサーがいない場所を含めるには、DefaultIfEmptylinq拡張方式を使用します。これにより、すべての場所に少なくとも1つのインデックスエントリがあることが保証されます。

private class Locations_ByCoordinates : AbstractIndexCreationTask<Location>
{
    public Locations_ByCoordinates()
    {
        Map = locations => from l in locations
                           from s in l.Sponsors
                                      .DefaultIfEmpty(new Sponsorship
                                      {
                                        From = DateTime.MinValue,
                                        To = DateTime.MaxValue
                                      })
                           select new
                           {
                               Sponsors_From = s.From,
                               Sponsors_To = s.To
                           };
    }
}
于 2013-03-28T13:55:00.687 に答える