0

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这是在将值设置为不正确的过滤器并且它毫无例外地接受它 之后的下一步的调试屏幕截图:成功设置了不正确的过滤器。

当没有引发预期的异常时,可能导致这种情况的原因是什么?

4

1 回答 1

2
于 2015-12-15T11:32:31.213 回答