【问题标题】:How to get all rows but specifc columns from a DataTable?如何从 DataTable 中获取除特定列之外的所有行?
【发布时间】:2011-01-24 22:11:20
【问题描述】:

目前我在通过选择所有行(但只选择一些列)从 DataTable 中获取一些数据时遇到一些问题。

为了更具描述性,这里是一个小例子:

样本数据

| ID | FirstName | LastName | Age |
+----+-----------+----------+-----+
|  1 | Alice     | Wannabe  | 22  |
|  2 | Bob       | Consumer | 27  |
|  3 | Carol     | Detector | 25  |

我有什么

所以我们从 GUI 中得到的是 IEnumerable<DataColumn> selectedColumns,我们会在其中找到两个元素(FirstNameLastName)。

现在我需要一些包含所有行的结果,但只包含上述两列(或任何其他 list 选定列)。

到目前为止,我已经在几个一维对象上使用了 LINQ,但是这个二维对象让我有点头疼。

// The hard-coded way
Table.AsEnumerable().Select(row => new { FirstName = row[1], LastName = row[2] });

// The flexible way
Table.AsEnumerable().Select(row => row ???)

但是我现在怎么说,应该使用我的 selectedColumns 选择行中的哪些列?

【问题讨论】:

  • 硬编码解决方案到底有什么问题?
  • 硬编码的方式没有问题。我只是不需要硬编码,因为我喜欢在运行时通过IEnumerable<DataColumn> 设置想要的列。

标签: c# linq datatable


【解决方案1】:

您可以使用以下代码获得类似的输出-

var result = Table.AsEnumerable().Select(row => 
             new { 
                   FirstName = row.ItemArray[Table.Columns["FirstName"].Ordinal], 
                   LastName = row.ItemArray[Table.Columns["LastName"].Ordinal] 
                 });

【讨论】:

    【解决方案2】:

    您不需要 Linq 来执行此操作:

    string[] selectedColumns = new[] { "ID", "LastName" };
    
    DataTable tableWithOnlySelectedColumns =
        new DataView(table).ToTable(false, selectedColumns);
    

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2021-07-30
      • 2018-11-23
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多