有效过滤DataTable

时间:2011-12-21 21:03:54

标签: c# linq filter datatable datarow

在DataTable中过滤DataRows的最有效方法是什么?我有一个整数列表,想要检索所有行(并最终从它们创建一个DataTable),它们匹配列表中的整数。我目前正在使用下面的代码,但它很慢。我错过了一种更有效的方法吗?

foreach (var i in integerlist)
{
     DataRow dr = (from row in originalDataTable.AsEnumerable()
                   where row.Field<int>("urlID") == i
                   select row).FirstOrDefault<DataRow>();

     if (dr!= null)
     {
          newDataTable.Rows.Add(dr);
     }
}

4 个答案:

答案 0 :(得分:3)

我建议你尝试反之亦然。

foreach (var row in originalDataTable)
{

    if(integerList.Contains( (int)row["urlID"]))
       newDataTable.ImportRow(row)
}

如果你的数据集中有更多的行,那么你的int集合中的整数会更有意义。 希望它有所帮助:)

答案 1 :(得分:1)

嗯......可能是我错过了什么,但是......

使用DataView并为其应用RowFilter并不容易吗?

答案 2 :(得分:1)

您可以尝试进行连接,例如:

var resultSet = 
from row in originalDataTable.AsEnumerable()
join i in integerlist
on row.Field<int>("urlID") equals i
select row;

应该为您提供完整的结果集。 如果您需要数据表,您可以这样做:

resultSet.CopyToDataTable();

答案 3 :(得分:0)

正如@Tigran所说,您可以使用数据视图,请检查this msdn article如何实现这一目标。

基本上,您使用DataView来过滤数据,并调用DataView.ToTable方法来获取新的DataTable。