LINQ到SQL搜索的日期只有部分日期(Linq-to-SQL to search only DAT

2019-09-17 07:32发布

我需要的基础上,如日期范围内获得的数据:

SELECT * FROM MyTable WHERE 
myDate >= 'May 17 2012' AND 
myDate <= 'May 17 2012'

我已经写在LINQ此查询的问题是,LINQ是这个查询转换为:

SELECT * FROM MyTable WHERE 
myDate >= 'May 17 2012 12:00:00:000AM' AND 
myDate <= 'May 17 2012 12:00:00:000AM'

问题是,LINQ也正在考虑在部分时间,但我需要搜索只在日期部分。

谁能帮我?

谢谢。

Answer 1:

只是想与大家分享,我找到了解决办法!

该EntityFunctions为我们提供TruncateTime(),它可以用于这一目的。

EntityFunctions.TruncateTime

 from e in MyContext.MyTable.Where(a =>
 EntityFunctions.TruncateTime(a.DateTimeColumn) ==   
 EntityFunctions.TruncateTime(DateTime.Now))  select e;

编辑:对于的EntityFramework 6及以上:

 from e in MyContext.MyTable.Where(a =>
 DbFunctions.TruncateTime(a.DateTimeColumn) ==   
 DbFunctions.TruncateTime(DateTime.Now))  select e;

我发现它在这里 。



Answer 2:

你是不是其实只是按日期部分探索; 幕后那个日期是DateTime 。 因此,要获得该行一天,想想它是这样的:

我想这都行MyDate大于或等于5月17日午夜,低于5月18日午夜。

下面的查询做到这一点。

var startDate = new DateTime(2012, 05, 17);
var endDate = new DateTime(2012, 05, 18);
var result = 
from row in context.MyTable
where row.MyDate >= startDate &&
      row.MyDate < endDate
select row;


Answer 3:

我一直在寻找这个答案也在今天-在这里找到Linq中比较日期要SQL

我也是双用探查检查,以确保它被翻译成SQL

from e in MyContext.MyTable.Where(a => a.DateTimeColumn.Date == DateTime.Now.Date)
select e;


Answer 4:

你有两个选择

from t in context.MyTable
where t.MyDate <= maxDate.AddDays(1)
select t

要么

from t in context.MyTable
where t.MyDate.Date <= maxDate.Date
select t

由于第二可能无法正确地使用你的数据库索引首先可能会提供更好的性能。 但是,二是意图更加明显。



文章来源: Linq-to-SQL to search only DATE portions of a date