C# 如何在datatable.select中使用Not

C# 如何在datatable.select中使用Not,c#,asp.net,.net,ado.net,.net-2.0,C#,Asp.net,.net,Ado.net,.net 2.0,我有一个列为“Status”的数据表(Ado.Net)。此列保存(每个记录中的)值 [“红色”、“绿色”、“蓝色”、“黄色”、“白色”、“其他颜色”] 我想选择状态值不是红色、绿色、蓝色的所有行 使用什么样的筛选表达式来选择符合我建议的条件的数据。所以我想实现一些类似于我们在sql查询中使用的东西(其中状态不在('Red'、'Green'、'Blue') 注意:此项目正在运行.NET 2.0。我无法使用linq假设您的数据表是类型化数据集的一部分,您可以使用linq to数据集,从中可以执行以下

我有一个列为“Status”的数据表(Ado.Net)。此列保存(每个记录中的)值

[“红色”、“绿色”、“蓝色”、“黄色”、“白色”、“其他颜色”]

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

使用什么样的筛选表达式来选择符合我建议的条件的数据。所以我想实现一些类似于我们在sql查询中使用的东西(其中状态不在('Red'、'Green'、'Blue')


注意:此项目正在运行.NET 2.0。我无法使用linq

假设您的数据表是类型化数据集的一部分,您可以使用linq to数据集,从中可以执行以下操作:

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

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

我已经测试过它,它可以根据需要工作:

DataRow[] filtered = tblStatus.Select("Status NOT IN ('Red','Green','Blue')");
生成的
DataRow[]
仅包含具有
其他颜色
黄色
白色
的数据行

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

string[] excludeStatus = {"Red","Green","Blue"};
var filteredRows = tblStatus.AsEnumerable()
    .Where(row => !excludeStatus.Contains(row.Field<string>("Status")));
string[]excludeStatus={“红色”、“绿色”、“蓝色”};
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();
}

此项目正在运行.NET 2.0。我无法使用linq