定位 DataRow 中的特定列

Targeting a specific column in a DataRow

我正在尝试执行与 Select * where [columnname] = [value] 等效的 C#。我从 foreach 循环开始逐行遍历 table,但是我忘记了不能通过 row.column["<colname>"] 访问列。

如何实现 objective?我看到的大多数示例都针对一个特定的行,目的是将其值转换为字符串,但是我的任务是将所有值为 DateTime == < DateTime.Today 的条目移动到存档的 table.

我可以继续下面的代码吗?还是我处理方法不对?

void archiveDates()
{
   foreach (DataRow row in workingupdates.storageTable.Rows)
   {
       //target DateTime column here                         
   }
}

您可以使用强类型的 Field extension method 并且还支持可空类型。您有索引、名称或 DataColumn(以及其他)的超载:

foreach (DataRow row in workingupdates.storageTable.Rows)
{
   DateTime dt = row.Field<DateTime>("columnname");          
}

如果您想查找日期列具有特定值的所有行,您可以使用 Linq-To-DataTable:

var matchingDataRows = workingupdates.storageTable.AsEnumerable()
    .Where(row => row.Field<DateTime>("columnname") == dateTimeVariable);

现在您可以简单地枚举这个查询:

foreach (DataRow row in matchingDataRows)
{
   // ...                      
}

或者像

这样创建一个集合
  • a DataRow[]matchingDataRows.ToArray()
  • 一个 List<DataRow>matchingDataRows.ToList()
  • 一个新的 DataTablematchingDataRows.CopyToDataTable()

请注意,您必须将 System.Linq; 添加到文件的顶部。