【问题标题】:How to pass DataTable.Select() result to a new DataTable?如何将 DataTable.Select() 结果传递给新的 DataTable?
【发布时间】:2011-06-20 11:47:27
【问题描述】:

我有一个名为 dt2DataTable 带有数据。我调用它的Select 方法来获取一些特定的行。

DataRow[] foundRows;

expression = "parent_id=1";

foundRows = dt2.Select(expression);

如何将Select-方法结果传递给新的DataTable——比如FilteredData

【问题讨论】:

    标签: c# .net datatable


    【解决方案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-cstackoverflow.com/a/4868500/1093940
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-21
        • 2016-06-01
        • 1970-01-01
        相关资源
        最近更新 更多