我希望有人可以提供帮助,我几天来一直在努力解决这个问题。
我正在尝试使用rowfilter过滤掉一些记录,该行过滤器的日期时间早于15分钟之前的一列,看着它,这看起来好像它会这样做:
Dim TimeStr As String
TimeStr = String.Format(CultureInfo.InvariantCulture, "#{0}#", Now.AddMinutes(-15))
AlertsView.RowFilter = "StatusId < 3 AND LastEmailed < " & TimeStr
在过滤器之前,视图中有6行但是在过滤器之后没有,我知道StatusId字段是正确的,好像我过滤它只是它工作正常。所有6行的LastEmailed值均为2013-09-03 23:06:44.813
我认为它可能是字符串转换的东西,但我被卡住了。
非常感谢
答案 0 :(得分:1)
#
表达式中两个RowFilter
字符之间的任何内容最终都会传递到DateTime.Parse(s, CultureInfo.InvariantCulture)
。
这应该在DataColumn.Expression
的{{3}}中提及,但事实并非如此。但是,如果深入挖掘,可以在内部类MSDN documentation的构造函数中找到它。
因此,只要你在不变文化中产生明确的价值观,你应该没事。为了安全起见,您可能希望使用System.Data.ConstNode为您提供类似2013-12-31T12:34:56
的值。将格式字符串更改为"#{0:s}#"
。
或更清洁:
Dim TimeStr As String
TimeStr = Now.AddMinutes(-15).ToString("s", CultureInfo.InvariantCulture)
AlertsView.RowFilter = "StatusId < 3 AND LastEmailed < #" & TimeStr & "#"
String.Format
在这里买不多。
另外 - 出于好奇,你确定你不是把苹果与橙子比较吗?数据库将UTC时间存储在LastEmailed
之类的字段中并不罕见。您可能需要使用DateTime.UtcNow
而不是Now
(DateTime.Now
的别名)。