如何使用Not In在datatable.select中

7
我有一个DataTable(Ado.Net),其中包含“Status”列。该列保存每个记录的值,如下所示:
['Red','Green','Blue','Yellow','White','OtherColors']
我想选择所有状态值不为Red、Green、Blue的行。
请问应该使用什么样的过滤表达式来选择符合我的条件的数据?我想实现类似于SQL查询中使用的功能(WHERE Status NOT IN ('Red','Green','Blue'))。
注:此项目正在运行.NET 2.0,无法使用LINQ。
3个回答

18

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

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<string>("Status")));

6
没有使用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();
}

1

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

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

即使您没有一个已键入的数据集,Linq to datasets也是您的答案。您需要进行一些转换,但并不难。

1
该项目正在运行.NET 2.0,我无法使用Linq。 - Binson Eldhose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接