Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq日期时间比较不起作用_Linq - Fatal编程技术网

Linq日期时间比较不起作用

Linq日期时间比较不起作用,linq,Linq,我有以下代码: DateTime timeStamp = Convert.ToDateTime(Request.QueryString["TimeStamp"]); var result = (from rs in db.VRec where rs.TimeStamp == timeStamp &&

我有以下代码:

        DateTime timeStamp = Convert.ToDateTime(Request.QueryString["TimeStamp"]);

        var result = (from rs in db.VRec
                      where               
                      rs.TimeStamp == timeStamp && 
                      rs.Fixure == wFixture
                      select rs).ToList();
即使传递了正确的时间戳,结果也显示为0

如果删除进行时间戳比较的部分:

   rs.TimeStamp == timeStamp
代码运行良好


你知道为什么datetime比较可能不起作用吗

DateTime
有一个非常好的分辨率-很可能您正在比较仅以毫秒为单位的时间戳,这将失败。您可能需要以下内容:

DateTime now = DateTime.Now;
DateTime then = now.Add(TimeSpan.FromMilliseconds(1));

const int EPSILON_MS = 10;
if(now.Subtract(then).TotalMilliseconds < EPSILON_MS)
{
    Console.WriteLine("More or less equal!");
}
DateTime now=DateTime.now;
DateTime then=now.Add(TimeSpan.frommilluses(1));
常数intε=10;
if(now.Subtract(then).total毫秒
从问题中,我不知道您是要将日期与时间进行比较,还是只比较日期部分。若你们只想比较日期,那个么下面的方法就行了

var result = (from rs in db.VRec
                      where               
                      rs.TimeStamp.Date == timeStamp.Date && 
                      rs.Fixure == wFixture
                      select rs).ToList();
由于您使用了对db的一些引用,所以我觉得您是从数据库中获取记录(从问题或标记中看,您使用的ORM并不明显)。假设您使用的是实体框架,上述查询将失败,例外情况是
.Date
没有直接转换为sql。如果是这样,您可以按照以下方式重写查询以使其正常工作

var result = (from rs in db.VRec
                      where               
                      rs.TimeStamp.Day == timeStamp.Day &&
                      rs.TimeStamp.Month == timeStamp.Month &&
                      rs.TimeStamp.Year == timeStamp.Year &&
                      rs.Fixure == wFixture
                      select rs).ToList();

这种方法的好处是,您可以将属性与任意深度进行比较,即您可以在查询中比较
小时
分钟
等。第二个查询在实体框架5中进行测试。

Linq将执行的sql查询中的DateTime参数转换为DateTime2。 也就是说,当您进行比较时,实际执行的sql将比较DateTime和DateTime2。这个比较将DateTime“转换”为DateTime2,毫秒部分将扩展为更高的分辨率(我认为这是一种奇怪的方式,请启发我)

尝试执行以下sql:

declare @d1 datetime   = '2016-08-24 06:53:01.383'
declare @d2 datetime2  = '2016-08-24 06:53:01.383'
declare @d3 datetime2 = @d1
select @d1 as 'd1', @d2 'd2', @d3 'converted'
select (case when (@d1 = @d2) then 'True' else 'False' end) as 'Equal',
(case when (@d1 > @d2) then 'True' else 'False' end) as 'd1 greatest' 

最有可能的是,这种比较很有效。你用什么做时间戳?您是否在调试器中检查了这两个值以查看它们是否真的相等?您是否尝试过
rs.TimeStamp.Equals(TimeStamp)
?@JayPatel:
==
Equals
日期时间
执行完全相同的操作(对于任何合理设计的类型,请仔细考虑)。