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

Looping through rows in DataTable and extracting element in C#

我想把DataTable中列的项目提取出来放到List中。

这是我的列表和数据表:

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"]);
}

我收到一个错误 "Cannot apply indexing with [] to an expression of type 'object'"

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

您需要像这样在 foreach 循环中强制转换它:

foreach (DataRow row in table.Rows)

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

的类型

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

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

您正在将 table 行转换为 var object.Convert 并将其转换为 DataRow 尝试

foreach(DataRow row in table.Rows)
{
    product.Add((int)row["StudyID"]);
}
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();

这是代码

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

}

lst 是列表<.Person>

只需将 var 行替换为 DataRow 行:

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