循环遍历DataTable中的行并在C#中提取元素

时间:2015-05-27 11:06:22

标签: c# datatable datarow

我想在DataTable中提取列的项目并将它们放在List中。

这是我的List和DataTable:

List<int> product1 = new List<int>();
DataTable table = this.IoC.Resolve<ISurveyResultsService>().GetProduct(studyYear, productName);

我想遍历DataTable并将元素放在列表中。我试过这样:

foreach (var row in table.Rows)
{
    product.Add((int)row["StudyID"]);
}

我收到错误&#34;无法将带有[]的索引应用于&#39; object&#39;&#39;&#34;

类型的表达式

知道如何尽可能简单地解决这个问题吗?

5 个答案:

答案 0 :(得分:4)

你需要在foreach循环中将它强制转换为:

foreach (DataRow row in table.Rows)

请注意,foreach中的类型定义充当强制转换。现在您的类型允许[]

您还可以使用 Linq 使其看起来更干净:

List<int> product = table.Rows.Cast<DataRow>().Select(row => (int)row["StudyID"]).ToList()

答案 1 :(得分:1)

foreach (DataRow row in table.Rows)
{
    product.Add((int)row["StudyID"]);
}

foreach (var row in table.AsEnumerable())
{
    product.Add((int)row["StudyID"]);
}

products = table.AsEnumerable().Select(row=>(int)row["StudyID"]).ToList();

答案 2 :(得分:0)

您正在将表格行转换为var对象。将其转换为DataRow 尝试

foreach(DataRow row in table.Rows)
{
    product.Add((int)row["StudyID"]);
}

答案 3 :(得分:0)

这是代码

  Person p=new Person();
  foreach(DataRow row in YourDataTable.Rows)
  { 
   p.name = row["name"].ToString();
   p.description = row["description"].ToString();
   lst.Add(p);

}

是列表&lt; .Person&gt;

答案 4 :(得分:0)

只需用DataRow行替换var行:

foreach (DataRow row in table.Rows)
        {
            product.Add((int)row["StudyID"]);
        }