使用List c#过滤数据表

时间:2014-08-04 09:46:46

标签: c# .net sql-server

我想删除包含List中提供的现有站点的所有Datatable行。但我的代码的问题是它只从数据表中删除了List的最后一项。

很抱歉第一次有点模棱两可,但是修复遗留应用所以必须使用.net 2.0 :(我知道我的逻辑问题,只是无法找到替代品!

DataView cView = result.DefaultView;

foreach (string items in existingSites)
{
    cView.RowFilter = "Sites <> '" + items + "'";
}

dgvResult.DataSource = cView;

2 个答案:

答案 0 :(得分:4)

你能使用LINQ(&gt; = .NET 3.5)吗?

DataTable result = result.AsEnumerable()
    .Where(row => !items.Contains(row.Field<string>("Sites")))
    .CopyToDataTable();

答案 1 :(得分:2)

那是因为你不断重置过滤器。试试这个:

DataView cView = result.DefaultView;
StringBuilder sb = new StringBuilder();
bool first = true;

foreach (string items in existingSites)
{
    if (first)
    {
        first = false;
    }
    else
    {
        sb.Append(" AND ");
    }

    sb.AppendFormat("Sites <> '{0}'", items);
}

cView.RowFilter = sb.ToString();
dgvResult.DataSource = cView;

当然,如果您可以使用更新的框架选项(如TimQ的答案),这不是最好的解决方案。