如何使用Not In datatable.select

本文关键字:datatable select In Not 何使用 | 更新日期: 2023-09-27 18:26:36

我有一个列为"Status"的DataTable(Ado.Net)。此列保存值(在每个记录中)

[‘红色’、‘绿色’、‘蓝色’、‘黄色’、‘白色’、‘其他颜色’]

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

根据我提出的标准,使用哪种筛选表达式来选择数据。所以我想实现一些类似于我们在sql查询中使用的东西(WHEREStatus NOT in(‘Red’,‘Green’,‘Blue’)

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

如何使用Not In datatable.select

我已经测试过了,它按要求工作:

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

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

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

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

如果没有Linq,您可以使用类似的DataView的行过滤器

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到数据集就是你的答案。你需要一些铸造,但不难。