我正在使用SQLite和NHibernate,我将我的日期作为字符串存储在SQLite上,因为我无法存储为Date。 一切都很好,直到需要比较日期..我尝试了以下代码:
var initialDate = DateTime.Parse(_InitialDate);
var finalDate = DateTime.Parse(_FinalDate);
return session.QueryOver<Locacoes>()
.Where(c => DateTime.Parse(c.InitialDate) >= initialDate )
.Where(c => DateTime.Parse(c.FinalDate) <= finalDate).List();
但我在第一个“Where”上得到了一个例外:“'Locacoes'类型的变量'c'在范围''上被引用,但它没有被定义”。
如何使用NHibernate比较SQLite上的日期?
我用上面的代码尝试了很多东西,但没有用。
编辑:它不重复,错误可以相同,但结果不同
答案 0 :(得分:0)
首先,虽然Sqlite喜欢假装一切都是字符串,但应该将其视为存储格式,并且没有理由为什么对象模型应该使用字符串来保存日期值。您的对象模型当然应该将属性键入DateTime或DateTimeOffset。然后正确配置你的NHibernate映射以将值映射到SQLite可以处理的内容(实际上我认为如果你只是告诉它使用SQLiteDialect,NHibernate会自动处理它。)
其次,我不认为QueryOver()可以处理像DateTime.Parse()这样的事情。不要将QueryOver()与Linq2NHibernate(Query()方法)混淆,后者具有更高级的表达式解释能力。另一方面,当您开始在对象模型中使用正确的类型时,不再需要使用Parse()。
至少如果你使用LINQ,它应该能够为SQLite处理DateTime.Date,如果你需要它:
session.Query<Locacoes>()
.Where(l => c.InitialDate.Date >= initialDate)
当然,如果您需要忽略非零时间组件,则只需要将Date
放在那里。