2

我在数据集中有多个表,所以现在我必须从数据表中获取所有列名。尽管我使用 for Loops 来获取列名,但是否可以通过 Linq 来完成。

4

3 回答 3

3

没有循环的 LINQ

  var columnNames = (from table in dataSet.Tables.OfType<DataTable>()
                from column in table.Columns.OfType<DataColumn>()
                select column.ColumnName).ToList();
于 2013-04-26T13:39:30.873 回答
2
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<>非泛型IEnumerable TablesColumns属性转换为IEnumerable<T>可在 Linq 查询中使用的类型。

于 2013-04-26T13:38:26.383 回答
0

尝试这个:

List<string> result = new List<string>();

foreach (DataTable item in dataSet.Tables)
{
    result.AddRange(item.Columns.Cast<DataColumn>().Select(i => i.ColumnName).ToList());
}
于 2013-04-26T13:31:44.523 回答