我有一个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());
}
})
答案 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)
});