比较dd-mm-yyyy日期时间

时间:2016-06-23 12:31:08

标签: c# linq date linq-to-entities

问题

我想比较“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';

3 个答案:

答案 0 :(得分:2)

根据您的实体框架版本使用DbFunctions.TruncateTimeEntityFunctions.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)

日期没有格式,它们是二进制值。如果数据库列的类型是日期类型之一,例如datedatetimedatetime2等,您可以搜索过去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事务的准确性产生疑问。我记得,这是由第三方提供商处理的