小编Pwn*_*ner的帖子

为什么DataTable.Select()返回错误的行?

DataTable.Select()函数返回错误的行,像这样的过滤器...

"booleanColumn1 AND booleanColumn2 AND GuidColumn1 ='00000000-0000-0000-0000-000000000000')"

几乎对此格式进行任何更改都会修复它(参见示例).在dataView上使用相同的过滤器可以正常工作.我很想改变它

"booleanColumn1 = 1 AND booleanColumn2 = 1 AND GuidColumn1 ='00000000-0000-0000-0000-000000000000')"

并声明它是固定的(文档没有提到"A"或"A = 1"是否是布尔列的正确语法).但是责任可以很容易地放在Guid专栏上.在我重新访问数百个地方之前,我们在代码库中使用DataTable.Select(),我希望看到是否有人知道实际发生了什么.

DataTable dt = new DataTable("dt");
dt.Columns.AddRange(new DataColumn[]
{
  new DataColumn("ID", typeof(Guid)),
  new DataColumn("A", typeof(bool)),
  new DataColumn("B", typeof(bool))
});

dt.Rows.Add(Guid.Empty, false, true);

// this incorrectly returns a row
Debug.WriteLine(dt.Select("B AND A AND ID = '00000000-0000-0000-0000-000000000000'").Length);

// yet it's fine for a DataView (correctly returns 0 rows)
DataView dv = new DataView(dt);
dv.RowFilter = "B AND A AND ID = '00000000-0000-0000-0000-000000000000'"; …
Run Code Online (Sandbox Code Playgroud)

.net datatable dataview select rowfilter

6
推荐指数
1
解决办法
1798
查看次数

标签 统计

.net ×1

datatable ×1

dataview ×1

rowfilter ×1

select ×1