从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。日期,但没有工作
我已经修改了查询,下面的工作应该如您所期望的:
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