仅从DataTable访问rowData

时间:2016-08-02 13:22:18

标签: c# .net datatable

我有一个DataTable,其中包含列名和行。现在按照我的要求,我必须得到只有行值,而不像我现在那样给出列名。这就是代码。

data = employees.AsEnumerable().Select(row=> new List<string>
{
   row.Field<string>("EmployeeName"),
   row.Field<string>("Company")
})

在上面的代码employees中是DataTable。怎么做。我必须将行值变为data变量,如代码所示。

更新

data = employees.AsEnumerable().Select(row=> new List<string>
{
 foreach(DataRow row in employees.Rows)
    {
        foreach(DataColumn col in employees.Columns)
         data.Add(row[col.Ordinal].ToString());
     }
})

2 个答案:

答案 0 :(得分:1)

您可以简单地使用此语法

data = employees.AsEnumerable().Select(row=> new List<string>
{ 
   row[0].ToString(),
   row[1].ToString()

});

其中0是EmployeeName列的索引,1是列Company的索引(如果您的查询类似于SELECT EmployeeName, Company from ....

但是,在我看来,这实际上是倒退了一步。使用列名可以保存代码,使其不受数据库表中加载列的顺序的影响。

修改 如果你想遍历每一行和每一列的每一行,你可以使用这个代码(此时使用IEnumerable扩展没有多大意义)

用foreach:

foreach(DataRow row in employees.Rows)
   foreach(DataColumn col in employees.Columns)
       data.Add(row[col.ColumnName].ToString());
   // or 
   // data.Add(row[col.Ordinal].ToString());

使用标准循环

for(int r = 0; r < employees.Rows.Count; r++)
   for(int c = 0; c < employees.Columns.Count; c++)
       data.Add(employees.Rows[r][c].ToString());

答案 1 :(得分:0)

也许你可以使用它?

var dt = new DataTable();

dt.AsEnumerable().Select(row => new List<string>
{
    row.Field<string>(0),
    row.Field<string>(1)
});