ADO.NET DataTable.Select(Filter)坏了

时间:2011-05-04 15:37:16

标签: .net vb.net ado.net

这是我的代码的熊骨版本,用于演示错误(VB):

Dim tbl As New DataTable
tbl.Columns.Add("StringColumn", GetType(String))
tbl.Columns.Add("GuidColumn", GetType(Guid))
tbl.Columns.Add("IntColumn", GetType(Integer))

'Comment this line out and it works!
tbl.PrimaryKey = New DataColumn() {tbl.Columns("GuidColumn")}

Dim guid1 As Guid = Guid.NewGuid

tbl.Rows.Add("Value1", guid1, Nothing)

Dim filter1 As String = "( [GuidColumn] = CONVERT('" & guid1.ToString & "',System.Guid) )"
Dim filter2 As String = "( NOT IsNull([StringColumn],'')='' AND NOT [IntColumn] IS NULL )"
Dim filter3 As String = filter1 & " AND " & filter2
Dim rows1 = tbl.Select(filter1) '1 rows
Dim rows2 = tbl.Select(filter2) '0 rows
Dim rows3 = tbl.Select(filter3) '1 rows (should be 0 rows)

......但它已经坏了。 (在.NET 4 SP1中运行)

Filter1的计算结果为True(这是PK上的过滤器)

Filter2评估为False

Filter1 AND Filter 2评估为......真!什么!!

这似乎是由于Data关键字的主键列上的NOT关键字和过滤的组合。 但是我无法弄清楚为什么会破坏它的确切规则。

对我来说,这就像ADO.NET中的一个错误,任何人都可以确认和/或建议解决方法。

非常感谢,

Mike G

0 个答案:

没有答案