如何获取DataTable中的所有行但特定列?

时间:2010-03-08 10:11:59

标签: c# linq datatable

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

这里有一个更具描述性的例子:

样本数据

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

我有什么

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

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

到目前为止,我已经在几个一维对象上使用了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选择行中的哪些列?

2 个答案:

答案 0 :(得分:3)

你不需要Linq这样做:

string[] selectedColumns = new[] { "ID", "LastName" };

DataTable tableWithOnlySelectedColumns =
    new DataView(table).ToTable(false, selectedColumns);

答案 1 :(得分:0)

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

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