我知道我们可以通过一个简单的循环很容易地做到这一点,但我想继续这个LINQ/ predicate ?
string[] columnNames = dt.Columns.? or string[] columnNames = from DataColumn dc in dt.Columns select dc.name;
xytpbqjk1#
请尝试以下操作(LINQ方法语法):
string[] columnNames = dt.Columns.Cast<DataColumn>() .Select(x => x.ColumnName) .ToArray();
或在LINQ查询语法中:
string[] columnNames = (from dc in dt.Columns.Cast<DataColumn>() select dc.ColumnName).ToArray();
Cast是必需的,因为列的DataColumnCollection类型是IEnumerable,而不是IEnumerable<DataColumn>。其他部分应该是显而易见的。
Cast
IEnumerable
IEnumerable<DataColumn>
1sbrub3j2#
用途
var arrayNames = (from DataColumn x in dt.Columns.Cast<DataColumn>() select x.ColumnName).ToArray();
yvgpqqbh3#
我建议使用这样的扩展方法:
public static class DataColumnCollectionExtensions { public static IEnumerable<DataColumn> AsEnumerable(this DataColumnCollection source) { return source.Cast<DataColumn>(); } }
因此:
string[] columnNames = dataTable.Columns.AsEnumerable().Select(column => column.Name).ToArray();
您还可以为DataTable类实现另一个扩展方法来减少代码:
DataTable
public static class DataTableExtensions { public static IEnumerable<DataColumn> GetColumns(this DataTable source) { return source.Columns.AsEnumerable(); } }
并按如下方式使用它:
string[] columnNames = dataTable.GetColumns().Select(column => column.Name).ToArray();
vddsk6oq4#
List<String> lsColumns = new List<string>(); if(dt.Rows.Count>0) { var count = dt.Rows[0].Table.Columns.Count; for (int i = 0; i < count;i++ ) { lsColumns.Add(Convert.ToString(dt.Rows[0][i])); } }
4条答案
按热度按时间xytpbqjk1#
请尝试以下操作(LINQ方法语法):
或在LINQ查询语法中:
Cast
是必需的,因为列的DataColumnCollection类型是IEnumerable
,而不是IEnumerable<DataColumn>
。其他部分应该是显而易见的。1sbrub3j2#
用途
yvgpqqbh3#
我建议使用这样的扩展方法:
因此:
您还可以为
DataTable
类实现另一个扩展方法来减少代码:并按如下方式使用它:
vddsk6oq4#