C# 在ServiceStack的Ormlite中处理日期和日期时间
我正在使用Ormlite.Oracle执行以下操作:C# 在ServiceStack的Ormlite中处理日期和日期时间,c#,sql,oracle,
ormlite-servicestack,C#,Sql,Oracle,
ormlite Servicestack,我正在使用Ormlite.Oracle执行以下操作: using (var db = dbFactory.Open()) { var events = db.From<Event>() .Where(row => row.Event_Date == Today); List<Event> results = db.Select(eve
using (var db = dbFactory.Open())
{
var events = db.From<Event>()
.Where(row => row.Event_Date == Today);
List<Event> results = db.Select(events);
db.Close();
return results;
}
问题是row.Event_Date是一个DateTime,而今天只是一个始终以00:00:00结尾的日期,因此where子句永远不匹配。我想将row.Event_Date转换为日期。我尝试过Event_Date.Date和Event_Date.toString gmm/dd/yyyy等,但这不起作用,因为OrmLite无法很好地将这些类型的转换转换转换为Oracle。例如,当我执行Event_Date.toString gmm/dd/yyyy时,OrmLite将其转换为Oracle中的varchar1000强制转换,但有点忘记了传递字符串格式
有没有办法不使用原始sql来解决这个问题?您只需将1天添加到今天,然后使用&&运算符选择所有具有正确日期部分的事件日期,而不考虑时间部分
var Tomorrow = Today.AddDays(1);
var events = db.From<Event>()
.Where(row => row.Event_Date >= Today &&
row.Event_Date < Tomorrow);
有趣的解决方案!我觉得我宁愿使用原始sql而不是这样做,但这是解决问题的一种聪明方法,我不知道ormlite,但它应该在适当的sql中转换该表达式,如果您在该Event_Date列上有一个索引,那么这应该非常快,我建议在处理时忘记字符串转换dates@jgozal不知道为什么在不需要的情况下会使用原始SQL,但是您可以在OrmLite的SQL表达式中添加原始SQL条件,其中q.Wherefield={0},value@mythz我之所以这么做,是因为原始sql比原始sql更具声明性this@jgozal我不同意,这正是我在C中进行范围查询的方式。