我可以发誓这是两天前工作的,现在它抛出一个例外...
我正在检查DataTable
中的某些数据。我基本上计算在过去15分钟内找到某个eventID
的次数。这是代码:
int startevents = trackingData
.Select("RHEventID = 3 AND RHDateEvent > #" + now + "#" ).Length;
我正在定义'现在'就在此之前的变量 - 看起来像这样:
DateTime now = DateTime.Now.AddMinutes(-15);
然而,这会抛出 String未被识别为有效的DateTime 异常。以下是数据表中RHDateEvent列中的数据示例:
2017-02-14 13:58:27 PM (编辑 - 是的,这只是列中的一个日期而不是两个日期)
那么我做错了什么?我是否需要以某种方式转换此DateTime?
答案 0 :(得分:2)
我真的建议使用Linq-To-DataTable
而不是旧的有限Select
方法:
DateTime in15minutes = DateTime.Now.AddMinutes(15);
var matchingRows = from row in trackingData.AsEnumerable()
where row.Field<int>("RHEventID) == 3
&& row.Field<DateTime>("RHDateEvent") > in15minutes
select row;
如果您现在只需要使用计数:
int matchingRowCount = matchingRows.Count();
这更具可读性,功能强大,并且支持编译时安全性。
如果您的专栏不是DateTime
- 而是string
- 列,则需要对其进行解析:
...
&& DateTime.Parse(row.Field<string>("RHDateEvent"), CultureInfo.InvariantCulture) > in15minutes
答案 1 :(得分:0)
看起来日期时间重复......
2017-02-14 13:58:27 PM 2017-02-14 13:57:27 PM
而不是
2017-02-14 13:58:27 PM
答案 2 :(得分:0)
如果它是实体的linq使用
var startevents = trackingData.Where(e => e.RHEventId = 3 && e.RHDateEvent >= DateTime.Now.AddMinutes(-15)).Count();