如何将 DataTable.Select() 结果传递给新的 DataTable?
Posted
技术标签:
【中文标题】如何将 DataTable.Select() 结果传递给新的 DataTable?【英文标题】:How to pass DataTable.Select() result to a new DataTable? 【发布时间】:2011-06-20 11:47:27 【问题描述】:我有一个名为 dt2
的 DataTable
带有数据。我调用它的Select
方法来获取一些特定的行。
DataRow[] foundRows;
expression = "parent_id=1";
foundRows = dt2.Select(expression);
如何将Select
-方法结果传递给新的DataTable
——比如FilteredData
?
【问题讨论】:
【参考方案1】:您可以使用CopyToDataTable
,在IEnumerable<DataRow>
类型上可用。
var filteredData = dt2.Select(expression).CopyToDataTable();
【讨论】:
【参考方案2】:为什么不改用DataView
?
DataView view = new DataView(dt2);
view.RowFilter = "parent_id = 1";
DataView
的行为方式与DataTable
的行为方式非常相似,另外还有一个好处是,对底层DataTable
(在这种情况下为dt2
)的任何更改都会自动反映在DataView
.
【讨论】:
【参考方案3】:为了清楚起见,Select
方法返回一个 DataRow
类型的数组。这就是为什么我们需要使用CopyToDataTable()
。亚历克斯的回答很好。但是,如果 Select
没有返回任何行,CopyToDataTable()
将抛出 InvalidOperationException
。
所以在使用CopyToDataTable()
之前测试至少有一个DataRow
。
var filteredDataRows = dt2.Select(expression);
var filteredDataTable = new DataTable();
if(filteredDataRows.Length != 0)
filteredDataTable = filteredDataRows.CopyToDataTable();
【讨论】:
为什么使用var filteredDataRows
而不是DataTable[] filteredDataRows
。您的解决方案效果很好,所以我很好奇
@DaveHampel 当您有点懒惰或为了更好地监督代码时,请使用var
,变量名称相互对齐。它意味着相同并且编译为相同并且确实是强类型的。它只是不明确。我通常使用var
,当它从作业中显而易见时。我不使用DataTable table = New DataTable();
,但我使用MyFancyClass mfc = SomeFunctionReturningAnMFC()
更多信息intellitect.com/when-to-use-and-not-use-var-in-c 和***.com/a/4868500/1093940以上是关于如何将 DataTable.Select() 结果传递给新的 DataTable?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 DataTable.Select(Expression) 中使用 SELECT GROUP BY?