从数据表查询以检索基于日期时间的信息

本文关键字:日期 时间 信息 于日期 查询 数据表 检索 | 更新日期: 2023-09-27 18:33:34

我的问题可能有点长,因为我试图解释它背后的背景。

我有一个DataTable(从数据库中检索),其中包含以下数据:

----------------------------------
-  State -         Date          -
==================================
-   on   -  02/01/2016 15:38:13  -
----------------------------------
-   off  -  22/01/2016 16:45:33  -
----------------------------------
-   on   -  27/01/2016 10:30:16  -
----------------------------------
-   off  -  01/02/2016 10:03:43  -
----------------------------------

我需要根据日期检查状态。介于两者之间的任何日期都将具有上一个日期的状态。示例:29/01/2016 的状态将为"开"。

我试图从DataTable中查询:

DateTime test = DateTime.Parse("27 / 01 / 2016"); //temporary part
var queryResults = table.AsEnumerable()
                           .Where(x => DateTime.Parse(x.Field<string>("Date")).Date == test);

现在,上面的查询返回满足条件的行。如果我将查询中的 where 语句更改为 Where(x => DateTime.Parse(x.Field<string>("Date")).Date <= test);它将返回前三行。

我的问题是..如果我使用小于或等于查询将测试值更改为 28/01/2016,它仍将返回前三行。我怎样才能只得到最后一个?最后一个状态。

任何帮助都非常感谢:)

从数据表查询以检索基于日期时间的信息

使用 .LastOrDefault() 获取集合中的最后一项

var queryResults = table.Where(x => DateTime.Parse(x.Field<string>("Date")).Date <= test).LastOrDefault();

Sid enote:在访问State属性之前,应检查null

您应该按降序排列,然后获取第一个

 queryResults = table.Where(x => DateTime.Parse(x.Field<string>("Date")).Date <= test).OrderByDescending(y=>y.Field<string>("Date")).FirstOrDefault();