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

时间:2016-08-23 10:37:43

标签: c# database linq

查询是c#中的linq,它比较我输入的开始和结束日期,间隔始终为15分钟。

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

  • 输入:my_startTime:上午11点15分& my_stopTime:上午11点30分

  • 与数据库相比:startTime:上午10:00&停止时间:中午12点

我的查询是

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是我的DbContextEnergyPeakInfo_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   

有时获取数据但有时会说空...这是什么原因? 我尝试给它my_startTime.date和my_stopTime.date但是没有工作

1 个答案:

答案 0 :(得分:0)

我修改了查询,以下内容应该按预期工作:

 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