如何使用Not in datatable.select

时间:2014-10-14 11:27:25

标签: c# asp.net .net ado.net .net-2.0

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

[ '红', '绿', '蓝', '黄', '白色', 'OtherColors']

我想选择状态值不是红色,绿色,蓝色

的所有行

使用我提议的标准选择数据的过滤表达式是什么样的。所以我想要在sql查询中使用一些东西(WHERE 状态不在('红色','绿色','蓝色')

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

3 个答案:

答案 0 :(得分:16)

我已经测试过,它可以按照预期运行:

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

结果DataRow[]仅包含OtherColorsYellowWhite的数据行。

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

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

答案 1 :(得分:5)

如果没有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();
}

答案 2 :(得分:1)

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

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

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