我在这里准备了完整的测试用例:https://gist.github.com/pkrakowiak/cc8addf5725193a01f2d
有Location
个文件。在某些时间段内,每个位置可以有零个或多个赞助商(由IList<Sponsorship> Sponsors
属性表示)。我只需要返回特定日期赞助的那些地点(例如我的例子中的3月15日)。因此,此类位置必须至少有一个与以下查询匹配的Sponsorship
实例:.Where(x => x.Sponsors.Any(s => s.From <= today && s.To >= today))
我准备了两个测试,一个是没有明确使用索引:CanGetCurrentlySponsoredLocations
,而是使用我创建的静态索引:CanGetCurrentlySponsoredLocationsUsingStaticIndex
。第一个将通过,第二个将失败。问题是 - 如何进行第二次测试?我需要对Locations_ByCoordinates
索引应用哪些修改?
如果您想知道索引名称的来源或评论的位置 - 请忽略它们。 :)它们是我正在测试的其他东西的残羹剩饭。
更新
我首先将此问题提交给官方RavenDB Google小组:https://groups.google.com/forum/?fromgroups=#!topic/ravendb/ySUPXqkpTA8可悲的是,它没有给我带来解决方案。
答案 0 :(得分: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
是什么。
<强>更新强>
要包含没有赞助商的位置,请使用DefaultIfEmpty
linq扩展方法。这将确保所有位置至少有一个索引条目。
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
};
}
}