Sitecore日期比较不会返回预期结果

时间:2017-05-31 09:31:07

标签: sitecore sitecore8

我正在尝试使用iqueryable查询返回课程列表,但是我遇到了一些日期比较问题。

我目前正在使用代码

query = query.Where(r => r.EndDate >= DateTime.UtcNow);

返回将来会有日期的课程,但是它不会返回在同一天结束的课程,其结束时间晚于DateTime.UtcNow返回的时间。

任何想法我做错了什么?

我刚刚使用Luke检查索引以及是否使用

end_date:[20170531t092205609z TO *]

我得到了我需要的确切结果,但是在日志中实际查询使用

+end_date:[20170531t092205609z TO *] +_template:a84b75fccac64eafa746f4b71e628adc - Filter : 

然后我得到更多的结果,包括我失踪的课程。

a)为什么我使用第二个查询得到更多结果?
b)为什么在我的C#代码中返回的结果与搜索结果不匹配?

1 个答案:

答案 0 :(得分:1)

有一个类似的问题并在此处描述了我们的解决方案:https://ggullentops.blogspot.be/2015/12/sitecore-lucene-index-and-datetime.html

我们的问题有两个原因:

  • 第一个原因是Sitecore将其DateTimes存储为UTC(与当地时间相差一小时)
  • 第二个原因是Sitecore在日期中使用“t”作为查询中的小写。在我的索引中,它们都是大写的。如果我尝试使用Luke查询它确实给了我错误的结果..当我在Luke中更改查询以使用大写T时它可以正常工作..

我们找到的最简单的解决方案是索引配置中的格式属性:

<field fieldName="datefrom" storageType="YES" indexType="UNTOKENIZED" vectorType="NO" boost="1f" 
format="yyyyMMdd" type="System.DateTime" 
settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider"/>

(请注意格式=“......”)