我在RavenHQ中有以下索引
from doc in docs
let Tag = doc["@metadata"]["Raven-Entity-Name"]
where Tag != null && Tag=="Email"
select new { Tag, LastModified = (DateTime)doc["@metadata"]["LastModified"], DateAdded=doc.DateAdded };
我也确实将DateAdded Indexing分析为。我想写一个Lucene查询,其中包含where子句中的 小于日期 条件。
我试过了,但它没有用。
Where("DateAdded: [NULL TO 2012-12-31").ToList()
C#在where子句中提供日期的确切方式是什么。
感谢。
答案 0 :(得分:5)
最好的方法是使用Raven的API,而不是自己构建查询:
var date = new DateTime(2012, 12, 31, 0, 0, 0, DateTimeKind.Utc);
session.Advanced.LuceneQuery<object>().WhereLessThan("LastModified", date);
如果你必须自己做,就像这样:
session.Advanced.LuceneQuery<object>()
.Where("LastModified: {NULL TO 2012-12-31T00:00:00.0000000Z}")
Raven使用与Lucene Range Query Syntax日期时间格式配对的ISO8601到7位小数,由dateTime.ToString("o")
提供的Round Trip Format提供。
请注意,您说“小于”,所以我使用了独占方括号{ TO }
。如果您想要“小于或等于”,那么您可以使用包含方括号[ TO ]
代替。
如果您包含结尾的]
字符,那么您在问题中提供的查询就会有效。但是,它不会是你想要的,因为任何带有时间组件的LastModified
条目都会在你指定的值之后下降。
另请注意,LastModified
元数据存储为UTC。