C# - 在LINQ上没有时间比较DateTime?

时间:2016-02-03 08:19:26

标签: c# linq datetime

[Route("api/sensors/{id}/{date}/Measurements")]
public IEnumerable<Measurement> GetMeasurements(int id, DateTime date)//date == "11:01:2016 00:00:00"
{
    return _unitOfWork.MeasurementRepository.Get(orderBy: e => e.Where(ex => ex.SensorId == id).Where(a => a.Time == date).OrderBy(tx => tx.Time));
    //a.Time = 11:01:2016 00:00:00, ..., 11:01:2016 00:15:00, ...,11:01:2016 00:30:00, ...,11:01:2016 00:45:00, ...
}

我必须返回搜索日期的所有测量值(日期时间日期),但我不知道如何在没有时间的情况下比较两个日期时间...

如果我使用a.Time.Date == date.Date,则会出现此错误: enter image description here

4 个答案:

答案 0 :(得分:2)

我之前也遇到过这个问题。幸运的是,有一个相当简单的解决方案。

<h3>Latest Posts</h3> {%for post in posts%} <a href=""><h4>{{post.title}}</h4></a> {% endfor %} 结构只提供DateTime属性。

  

物业价值
  键入:System.DateTime
  与此实例具有相同日期的新对象,时间值设置为午夜12:00:00(00:00:00)   https://msdn.microsoft.com/en-us/library/system.datetime.date(v=vs.110).aspx

这意味着您可以简单地执行此操作

Date

答案 1 :(得分:0)

只需使用Date的{​​{1}}属性即可。这个属性并不完全忽略时间,但会假设时间是午夜。

答案 2 :(得分:0)

你可以这样做

.Where(a => a.Time >= date.From() && a.Time <= date.To())

使用辅助方法

 public static DateTime From(this DateTime value)
 {
     return new DateTime((value.Year, value.Month, value.Day);
 }

 public static DateTime To(this DateTime value)
 {
     return new DateTime(value.Year, value.Month, value.Day, 23, 59, 59);
 }

答案 3 :(得分:-1)

尝试使用EntityFunctions.TruncateTime或在EF 6.0中将其替换为DbFunctions.TruncateTime,然后将其与转换为短日期字符串(date.ToShortDateString())的已知日期进行比较。

所以:

[Route("api/sensors/{id}/{date}/Measurements")]
public IEnumerable<Measurement> GetMeasurements(int id, DateTime date)//date == "11:01:2016 00:00:00"
{
    return _unitOfWork.MeasurementRepository.Get(orderBy: e =>
        e.Where(ex => ex.SensorId == id).Where
        (a => EntityFunctions.TruncateTime(a.Time) == date.ToShortDateString())
        .OrderBy(tx => tx.Time));
}