我System.Data.DataView.RowFilter
用于表过滤。我有一个DateTime
数据类型为“时间”的列,对于这个列,我使用以下过滤器:
时间<= '15.12.2015 11:38:03.000'
但我不小心打错了分隔秒和毫秒的点,而是输入了分号:
时间<= '15.12.2015 11:38:03:000'。
我在表中有一些数据,在第一种情况下它被过滤了,但第二种情况给出了空结果。
但是当我试图在项目之外重新创建这个问题时,我发现第二种情况会引发异常!
代码:
var dt = new DataTable();
var col = dt.Columns.Add("Time");
col.DataType = typeof(DateTime);
var row = dt.NewRow();
row["Time"] = DateTime.Parse("14.12.2015 11:38:03.000");
dt.Rows.Add(row);
dt.Rows.Count.Dump();
dt.DefaultView.RowFilter="Time<= '15.12.2015 11:38:03.000'"; // Ok.
dt.DefaultView.RowFilter="Time<= '15.12.2015 11:38:03:000'"; // Evaluation Exception.
我已经检查了好几次,并且在我的项目中:
- 不会抛出此异常。
- RowFilter 等于分配
"Time<= '15.12.2015 11:38:03:000'"
后。 - 当使用正确的过滤器表达式时,代码将继续执行。
我认为这可能是 .Net 4.0 错误并将我的测试应用程序的框架设置为它。结果相同:它抛出异常,但项目中没有异常。
在测试应用程序中,即使没有调试也会抛出异常,在发布版本中,因此它不依赖于调试器设置。
我已经仔细检查过我使用来自同一个库的相同类。
我在同一台 PC 上运行我的项目和测试应用程序。
RowFilter
这是在将值设置为不正确的过滤器并且它毫无例外地接受它
之后的下一步的调试屏幕截图:
当没有引发预期的异常时,可能导致这种情况的原因是什么?