c# - 嵌套列表日期过滤器
问题描述
在我的索引中,我有类型为吸引力的文件,它们有一个属性,即报价列表。这些优惠有一个到期日。每个景点可以有多个优惠(优惠属性是优惠列表)。
我要做的是过滤掉所有附加了过期优惠的所有附件。
我已经做到了这一点:
private QueryContainer AddExpiredOffersFilter(QueryContainerDescriptor<AttractionDocument> query)
{
query.DateRange(d => d.Field(f => f.Offers.First().Expires).GreaterThan(DateTime.Now));
return query;
}
但是,这仅适用于第一个附加报价。我将如何过滤所有附加的报价?
解决方案
您可以在数组上使用 Max 并将其与 Datetime.now 进行比较。
重要提示:请注意 .First() 不仅仅意味着第一个项目(而且弹性不会在 indexaction 中保持项目顺序)。分析整个数组(但实际上,.Field 运算符是一个或,因此不适用于您的情况,可以使用 must_not bool 父子句顺便说一句)。
private QueryContainer AddExpiredOffersFilter(QueryContainerDescriptor<AttractionDocument> query)
{
query.DateRange(d => d.Field(f => f.Offers.Max(r => r.Expires)).GreaterThan(DateTime.Now));
return query;
}