我有一个内存中的DataTable,它包含两个类型为DateTime
的字段,分别是LastAction和LastHeartbeat,表示实体最后一次发送活动日志消息以及实体最后一次发送心跳(“I” m alive“)日志消息。
我正在构建一种方法,用各种标准查询数据表,包括系统中实体的“最大不活动时间”。此最大超时意味着要考虑LastAction和LastHeartbeat,因此查询将类似于(LastAction > Now-timeout || LastHeartbeat > Now-timeout)
,现在就可以了。超时值以整数秒表示。
目前我在两行中这样做
DateTime lastActivity = DateTime.UtcNow.Subtract(TimeSpan.FromSeconds(maxinactivity));
filters.Add(string.Format("({0} >= {2} OR {1} >= {2}}", _colLastAction.ColumnName, _colLastHeartbeat.ColumnName, lastActivity.ToString(CultureInfo.InvariantCulture)));
最终结果将显示为(LastAction >= #...# OR LastHeartbeat >= #...#)
,具体取决于执行查询的当前时间
我的问题是:我可以在查询中进行日期减法吗?运算符是否存在所以我可以直接在查询中键入超时?在SQL中,至少在MySQL中,我能够使用NOW()函数进行日期减法。在ADO.NET中也可以吗? Kepp记住这是一个用于离线ADO.NET的内存表,因为数据不应该以任何方式持久存在。
谢谢
答案 0 :(得分:1)
如果你问的是你是否可以在查询字符串中进行日期算术,那么不; DataTable
和DataView
中提供的过滤和查询功能都非常简单。根据您正在做的事情,您可能最好使用LINQ查询。