我有以下代码:
DateTime timeStamp = Convert.ToDateTime(Request.QueryString["TimeStamp"]);
var result = (from rs in db.VRec
where
rs.TimeStamp == timeStamp &&
rs.Fixure == wFixture
select rs).ToList();
即使传递了正确的timeStamp,结果仍显示为0。
如果我删除了我进行TimeStamp比较的部分:
rs.TimeStamp == timeStamp
代码工作正常。
有关为什么日期时间比较可能不起作用的任何想法?
答案 0 :(得分:2)
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!");
}
答案 1 :(得分:0)
从问题来看,我不知道您是想比较日期与时间还是仅比较日期部分。如果您只想比较日期,那么以下工作
var result = (from rs in db.VRec
where
rs.TimeStamp.Date == timeStamp.Date &&
rs.Fixure == wFixture
select rs).ToList();
由于您正在使用对db的一些引用,因此它让我感觉您从数据库中获取记录(您使用的ORM在问题或标记中并不明显)。假设您正在使用Entity框架,则上述查询将失败,但.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();
此方法的好处是您可以将属性与任意深层次进行比较,即您可以在查询中比较Hours
,Minutes
,Seconds
等。第二个查询在实体框架5中进行测试。
答案 2 :(得分:0)
Linq在执行的sql查询中将DateTime参数转换为DateTime2。 也就是说,当你进行比较时,执行的实际sql会将DateTime与DateTime2进行比较。这个比较会将DateTime“转换”为DateTime2,毫秒部分将扩展到更高的分辨率(在我看来,请以奇怪的方式启发我)。
尝试执行以下sql:
.box {
align-content: flex-start;
border: solid 5px gray;
display: flex;
flex-direction: row;
flex-wrap: wrap;
margin-left: 50px;
max-width: 900px;
height: 100%;
overflow-y: scroll;
}
.innerbox {
background-color:gray;
background-size: cover;
margin: 5px;
flex-direction: row;
display: flex;
border: solid 1px gray;
flex-wrap: wrap;
justify-content: space-between;
}