获取RavenDB reduce结果中的最小/最大日期

获取RavenDB reduce结果中的最小/最大日期,ravendb,Ravendb,我有一个多地图索引,需要在Reduce结果中获得最大日期 当我尝试时: Reduce=results=>from result in results 按result.Id将结果分组到g中 选择新的 { Id=g.键, AccountId=g.Select(x=>x.AccountId)。其中(x=>x!=null)。FirstOrDefault(), Hostnames=g.SelectMany(x=>x.Hostnames), NextRenewalDate=g.Select(x=>x.Nex

我有一个多地图索引,需要在Reduce结果中获得最大日期

当我尝试时:

Reduce=results=>from result in results
按result.Id将结果分组到g中
选择新的
{
Id=g.键,
AccountId=g.Select(x=>x.AccountId)。其中(x=>x!=null)。FirstOrDefault(),
Hostnames=g.SelectMany(x=>x.Hostnames),
NextRenewalDate=g.Select(x=>x.NextRenewalDate).Max(),
SubscriptionCount=g.Sum(x=>x.SubscriptionCount)
};
NextRenewalDate
始终为空

不过,我可以做到:

NextRenewalDate=g.Select(x=>x.NextRenewalDate)。第一个默认值,
我确实得到了一个结果

我想知道这是否是因为RavenDB是如何解释索引中的日期的。我的成绩等级如下:

公共类ReduceResult
{
公共字符串Id{get;set;}
公共字符串AccountId{get;set;}
公共字符串[]主机名{get;set;}
public DateTime NextRenewalDate{get;set;}
public int SubscriptionCount{get;set;}
}
更新 此后,我一直能够使索引正常工作,但前提是我将
DateTime
转换为ISO8601字符串。我的完整索引如下:

公共类帐户\u站点:AbstractMultiMapIndexCreationTask
{
公共帐户(网址)
{
AddMap(站点=>来自站点中的站点
从site.url中的url
选择新的
{
Id=site.Id,
AccountId=(字符串)null,
Hostnames=new[]{url.Hostname},
SubscriptionDueDate=DateTime.MinValue,
SubscriptionStartDate=DateTime.MinValue
});
AddMap(accounts=>来自accounts中的account
从account.Sites中的siteId
来自帐户中的订阅。订阅
其中订阅!=null
选择新的
{
Id=站点Id,
AccountId=account.Id,
主机名=新字符串[0],
SubscriptionDueDate=subscription.NextRenewalDate,
SubscriptionStartDate=subscription.StartDate
});
Reduce=results=>from result in results
按result.Id将结果分组到g中
选择新的
{
Id=g.键,
AccountId=g.Select(x=>x.AccountId)。其中(x=>x!=null)。FirstOrDefault(),
Hostnames=g.SelectMany(x=>x.Hostnames),
SubscriptionDueDate=g.Max(x=>x.SubscriptionDueDate.ToString(“o”),//ISO 8601格式,例如2012-10-22T12:51:03.0263843+00:00
SubscriptionStartDate=g.Max(x=>x.SubscriptionStartDate.ToString(“o”))
};
}
公共类ReduceResult
{
公共字符串Id{get;set;}
公共字符串AccountId{get;set;}
公共字符串[]主机名{get;set;}
public DateTime SubscriptionDueDate{get;set;}
公共日期时间订阅开始日期{get;set;}
}
}
更新2 我在下面发布了一个完全失败的测试。丹尼尔的测试确实有效,但以下测试失败。但是,将
TestSubscription.EndDate
更改为
DateTime.Now
(而不是
UtcNow
)确实有效。这是使用build1.2.2103-Unstable

公共类测试帐户
{
公共字符串Id{get;set;}
公共列表站点{get;set;}
公共列表订阅{get;set;}
公共测试帐户()
{
站点=新列表();
订阅=新列表();
}
}
公共类测试订阅
{
公共日期时间结束日期{get;set;}
}
公共类测试站点
{
公共字符串Id{get;set;}
公共字符串主机名{get;set;}
}
订阅的公共类站点:AbstractMultiMapIndexCreationTask
{
公共站点订阅()
{
AddMap(站点=>来自站点中的站点
选择新的
{
SiteId=site.Id,
Hostname=site.Hostname,
SubscriptionEndDate=DateTime.MinValue
});
AddMap(accounts=>来自accounts中的account
从account.Sites中的siteId
来自帐户中的订阅。订阅
选择新的
{
SiteId=SiteId,
主机名=(字符串)null,
SubscriptionEndDate=subscription.EndDate
});
Reduce=results=>from result in results
按result.SiteId将结果分组到g中
选择新的
{
SiteId=g。