我想比较“dd-mm-yyyy”DateTime而不考虑时间。
我尝试将标准DateTime值与我的数据库DateTime进行比较,如下所示:
C#/ LINQ:
var startDate = DateTime.Today.AddDays(-10);
var endDate = DateTime.Today;
dateList= (from x in db.MY_DB
where (x.DATE >= startDate && x.DATE < endDate)
select x).ToList();
但是,我的列表永远不会被填充,即使许多条目符合此条件,我在SQL中使用以下查询进行了验证:
SQL查询:
Select * from db.my_db where date between '13-JUN-2016' and '23-JUN-2016';
答案 0 :(得分:2)
根据您的实体框架版本使用DbFunctions.TruncateTime
或EntityFunctions.TruncateTime
:
当用作LINQ to Entities查询的一部分时,此方法将调用 规范的TruncateTime EDM函数用于返回给定的日期 时间部分清除。
var start = DateTime.Now.Date.AddDays(-10);
dateList = (from x in db.MY_DB
where ((DbFunctions.TruncateTime(x.DATE) < DateTime.Now.Date) &&
((DbFunctions.TruncateTime(x.DATE) >= start)
select x).ToList();
答案 1 :(得分:0)
日期没有格式,它们是二进制值。如果数据库列的类型是日期类型之一,例如date
,datetime
,datetime2
等,您可以搜索过去10天内的任何记录,如下所示:
var startDate=DateTime.Today.AddDays(-10);
var dateQuery=from row in db.MyTable
where row.Date >=startDate;
要搜索截至目前的日期:
var startDate=DateTime.Today.AddDays(-10);
var endDate=DateTime.Now;
var dateQuery=from row in db.MyTable
where row.Date >=startDate && row.Date<endDate;
如果今天有可能发生Now
之后的条目,您可以将结束参数更改为明天午夜。查询的其余部分保持不变:
var startDate=DateTime.Today.AddDays(-10);
var endDate=DateTime.Today.AddDays(1);
var dateQuery=from row in db.MyTable
where row.Date >=startDate && row.Date<endDate;
答案 2 :(得分:0)
使用Microsoft Northwind示例db,我编写了等效的LINQ:
var endDate = new DateTime(1996, 8, 1);
var startDate = endDate.AddDays(-10);
var dateList= (from x in Orders
where (x.OrderDate >= startDate && x.OrderDate < endDate)
select x).ToList();
dateList.Dump();
并且工作正常。
现在,我将假设您正在使用Oracle,我非常确定使用该日期显示格式,这会对Linq到PL-SQL事务的准确性产生疑问。我记得,这是由第三方提供商处理的