2016-08-02 29 views
-1

我有一个DataTable其中包含列名和行。现在根据我的要求,我只需要获取行值,而不必像我现在所做的那样提供列名称。以下是代码。只从DataTable访问rowData

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

在上面的代码employeesDataTable。如何做到这一点。我必须得到行值为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()); 
    } 
}) 

回答

1

你可以简单地使用这个语法

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

}); 

其中0是列EmployeeName和1的指数为列公司的索引(如果您的查询是一样的东西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()); 
+0

有没有什么办法让我可以遍历所有的行,而不硬编码像'[0]''[1]'等你可以使用employees.Columns.Count为一个循环 – Lara

+0

。 –

+0

你说的是不是列的行吗? – Steve

0

也许你可以使用?

var dt = new DataTable(); 

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