定位 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()
- 一个新的
DataTable
和 matchingDataRows.CopyToDataTable()
请注意,您必须将 System.Linq;
添加到文件的顶部。
我正在尝试执行与 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()
- 一个新的
DataTable
和matchingDataRows.CopyToDataTable()
请注意,您必须将 System.Linq;
添加到文件的顶部。