当 DataView.RowFilter 设置为不正确的过滤器时,不会抛出预期的异常

Expected exception is not thrown, when DataView.RowFilter is set to incorrect filter

我使用 System.Data.DataView.RowFilter 进行 table 过滤。我有一个数据类型为 DateTime 的列 "Time",对于此列,我使用以下过滤器:

Time<= '15.12.2015 11:38:03.000'

但是我不小心输错了分隔秒和毫秒的点,而是输入了分号:

Time<= '15.12.2015 11:38:03:000'.

我在 table 中有一些数据,在第一种情况下它被过滤了,但第二种情况给出了空结果。

但是当我试图在项目外重现这个问题时,我发现,第二种情况会抛出异常!

代码:

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.

我检查了好几次,在我的项目中:

我认为这可能是 .Net 4.0 错误并将我的测试应用程序的框架设置为它。 同样的结果:它抛出异常,但在项目中没有异常。

在测试应用程序中,即使没有调试,在发布版本中也会抛出异常,因此它不依赖于调试器设置。

我仔细检查过我使用的是来自同一个库的相同 类。

我 运行 我的项目和测试应用程序都在同一台电脑上。

这是 RowFilter 值设置为不正确的过滤器后下一步的调试屏幕截图,它无一例外地接受它:

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

我测试了你的代码,似乎没有测试过滤器,除非数据中有一行table
此代码有效

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.DefaultView.RowFilter = "Time<= '15.12.2015 11:38:03.000'"; 
            dt.DefaultView.RowFilter = "Time<= '15.12.2015 11:38:03:000'";

但是如果您在设置过滤器后在数据table中添加一行,它将生成一个错误,指出您无法将时间与字符串进行比较

 var row = dt.NewRow();
 row["Time"] = DateTime.Parse("14.12.2015 11:38:03.000");
 dt.Rows.Add(row); //this will generate an error

错误“无法对 System.DateTime 和 System.String 执行 '<=' 操作。”

所以数据table为空时不执行过滤器

编辑: CodingFeles :为了测试过滤器,table 应该在过滤器

中使用的列中有一些值