C# 如何从数据表中获取除指定列以外的所有行?
目前,我在通过选择所有行(但仅选择一些列)从DataTable中获取一些数据时遇到一些问题 更具描述性的是,这里有一个小例子: 样本数据 我所拥有的 因此,我们从GUI中得到的是一个C# 如何从数据表中获取除指定列以外的所有行?,c#,linq,datatable,C#,Linq,Datatable,目前,我在通过选择所有行(但仅选择一些列)从DataTable中获取一些数据时遇到一些问题 更具描述性的是,这里有一个小例子: 样本数据 我所拥有的 因此,我们从GUI中得到的是一个IEnumerable selectedColumns,在那里我们将找到两个元素(FirstName和LastName) 现在我需要一个包含所有行的结果,但只包含上面两列(或任何其他选定列的列表) 到目前为止,我已经在几个一维对象上使用了LINQ,但是这个二维对象让我有点头疼 // The hard-coded wa
IEnumerable 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来选择行中的哪些列呢?您不需要Linq来做这件事:
string[] selectedColumns = new[] { "ID", "LastName" };
DataTable tableWithOnlySelectedColumns =
new DataView(table).ToTable(false, selectedColumns);
您可以使用以下代码获得类似的输出-
var result = Table.AsEnumerable().Select(row =>
new {
FirstName = row.ItemArray[Table.Columns["FirstName"].Ordinal],
LastName = row.ItemArray[Table.Columns["LastName"].Ordinal]
});
硬编码解决方案到底出了什么问题?硬编码方式没有什么问题。我只是不需要硬编码,因为我喜欢在运行时通过
IEnumerable
设置想要的列。
var result = Table.AsEnumerable().Select(row =>
new {
FirstName = row.ItemArray[Table.Columns["FirstName"].Ordinal],
LastName = row.ItemArray[Table.Columns["LastName"].Ordinal]
});