如何使用Not in datatable.select

我有一个DataTable(Ado.Net),其列为’Status’。 此列包含值(在每个记录中)

[ ‘红’, ‘绿’, ‘蓝’, ‘黄’, ‘白’, ‘OtherColors’]

我想选择状态值不是红色,绿色,蓝色的所有行

使用我提议的标准选择数据的filter表达式是什么样的。 所以我想要在sql查询中使用一些东西(WHERE Status NOT IN(’Red’,’Green’,’Blue’)

注意:这个项目运行.NET 2.0我不能使用linq

我测试了它,它按预期工作:

DataRow[] filtered = tblStatus.Select("Status NOT IN ('Red','Green','Blue')"); 

生成的DataRow[]仅包含带有OtherColorsYellowWhite DataRows。

如果你可以使用LINQ,我更喜欢:

 string[] excludeStatus = {"Red","Green","Blue"}; var filteredRows = tblStatus.AsEnumerable() .Where(row => !excludeStatus.Contains(row.Field("Status"))); 

没有Linq,你可以像这样使用DataView的rowfilter

 public DataTable GetFilteredData(DataTable table, string[] filterValues) { var dv = new DataView(table); var filter = string.join("','", filterValues); dv.RowFilter = "Status NOT IN ('" + filter + "')"; return dv.ToTable(); } 

假设您的数据表是类型化数据集的一部分,您可以将Linq用于数据集,您可以从中使用以下内容:

 var records = from record in datatable where !record.Status.Contains('Red','Green','Blue') select record; 

即使您没有类型化的数据集,Linq to datasets也是您的答案。 你需要一些铸造,但并不困难。