我的问题可能有点长,因为我试图解释它背后的背景。
我有一个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,它仍将返回前三行。我怎样才能得到最后一个?最后一个州。
非常感谢任何帮助:)
答案 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();