如何通过LINQ从数据集中的多个表中获取所有列的名称

本文关键字:获取 LINQ 何通过 数据 数据集 集中 | 更新日期: 2023-09-27 18:10:57

我在数据集中有多个表,所以现在我必须从数据表中获得所有列的名称。是否有可能通过Linq,虽然我使用循环来获取列名。

如何通过LINQ从数据集中的多个表中获取所有列的名称

LINQ无循环

  var columnNames = (from table in dataSet.Tables.OfType<DataTable>()
                from column in table.Columns.OfType<DataColumn>()
                select column.ColumnName).ToList();
var columns = dataSet.Tables
                     .Cast<DataTable>()
                     .SelectMany(t=>t.Columns
                                     .Cast<DataColumn>()
                                     .Select(c=>c.ColumnName));

或者如果还需要表名

var columns = dataSet.Tables
                     .Cast<DataTable>()
                     .SelectMany(t=>t.Columns
                                     .Cast<DataColumn>()
                                     .Select(c=> new {
                                                      t.TableName, 
                                                      c.ColumnName
                                                     }
                                            )
                                 );

Cast<>是将非泛型的IEnumerableTablesColumns属性转换为可用于Linq查询的IEnumerable<T>类型所必需的。

试试这个:

List<string> result = new List<string>();
foreach (DataTable item in dataSet.Tables)
{
    result.AddRange(item.Columns.Cast<DataColumn>().Select(i => i.ColumnName).ToList());
}