在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);
}
}
答案 0 :(得分:3)
我建议你尝试反之亦然。
foreach (var row in originalDataTable)
{
if(integerList.Contains( (int)row["urlID"]))
newDataTable.ImportRow(row)
}
如果你的数据集中有更多的行,那么你的int集合中的整数会更有意义。 希望它有所帮助:)
答案 1 :(得分:1)
答案 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。