从DB获取数据的Linq查询显示null,即使有可用的数据

本文关键字:数据 显示 获取 DB Linq 查询 null | 更新日期: 2023-09-27 18:03:30

查询是c#中的linq,它比较我输入的开始和停止日期,间隔总是15分钟。

与数据库startDB和stopDB进行比较。即使数据库中有可用的数据,也不会返回任何内容。

  • 输入:my_startTime: 11.15 am &my_stopTime: 11.30 am

  • 对比数据库:startTime: 10:00 am &stopTime:旧

我的查询是

var data = DbUpdateLoop.context.EnergyPeakInfo_Tbl
                  .Where(x => (my_startTime >= x.StartTime) && (my_stopTime <= x.StopTime))
                  .FirstOrDefault();
if (data == null)
{
    MsgBox = "No data available in DB";
}

这里,DbUpdateLoop.context是我的DbContext, EnergyPeakInfo_Tbl是我的表名,我的数据库有以下数据:

 EID     datetime.now        type  startTime            EndTime
    1   8/23/2016 11:06 AM  2   OFF 8/23/2016 10:45 AM  8/23/2016 11:15 AM  0   
    2   8/23/2016 11:06 AM  0   ON  8/23/2016 11:15 AM  8/23/2016 12:00 PM  0   

它有时获取数据,但有时显示null…原因是什么?我试着给它my_startTime。和my_stopTime。日期,但没有工作

从DB获取数据的Linq查询显示null,即使有可用的数据

我已经修改了查询,下面的工作应该如您所期望的:

 var result = TimeTables
   .Where (
      c => 
            (((c.StartTime >= (DateTime?)(DateTime.Parse("14:20:00"))) && 
                  (c.StopTime <= (DateTime?)(DateTime.Parse("15:30:00")))
               ) || 
                  ((c.StopTime <= (DateTime?)(DateTime.Parse("15:30:00"))) && 
                     (c.StopTime >= (DateTime?)(DateTime.Parse("14:20:00")))
                  )
              )
          )

或者更具体地说是时间:只从DateTime中提取时间- c.StartTime.Value.TimeOfDay

 TimeTables
   .Where (
      c => 
            (((c.StartTime.Value.TimeOfDay >= (TimeSpan.Parse("14:20:00"))) && 
                  (c.StopTime.Value.TimeOfDay <= (TimeSpan.Parse("15:30:00")))
               ) || 
                  ((c.StopTime.Value.TimeOfDay <= (TimeSpan.Parse("15:30:00"))) && 
                     (c.StopTime.Value.TimeOfDay >= (TimeSpan.Parse("14:20:00")))
                  )
              )
          )

记住你必须把12小时的时间格式转换成24小时作为输入。顺便说一下,我使用的表结构如下:

Table - TimeTables:
ID - StartTime - StopTime
 1 - 2016-08-23 13:00:00.000 - 2016-08-23 14:00:00.000
 2 - 2016-08-23 14:00:00.000 - 2016-08-23 15:00:00.000