从DataTable查询以基于DateTime检索信息

时间:2016-02-08 06:55:33

标签: c# asp.net-mvc datetime datatable

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

我有一个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,它仍将返回前三行。我怎样才能得到最后一个?最后一个州。

非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

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