【发布时间】:2020-08-23 12:13:45
【问题描述】:
我在过滤 DataTable 时遇到问题,比如 DtFromExcel。 DataTable 没有标题行,它以实际数据行开头,如下所示。
1 | 05/01/2020 Fri | ABC | XYZ | ...
2 | 05/01/2020 Fri | AAA | WKV | ...
3 | 05/02/2020 Sat | BCD | OPQ | ...
4 | 05/03/2020 Sun | CDE | RST | ...
5 | 05/03/2020 Sun | EFA | FAY | ...
6 | 05/03/2020 Sun | AXG | EAS | ...
7 | 05/04/2020 Mon | DEF | LMN | ...
8 | 05/04/2020 Mon | SXA | YTR | ...
9 | 05/05/2020 Tue | DAF | AAG | ...
第二列包含某个日期和一些额外的字符串(星期几),这些行按此日期列排序。可以有多个具有相同日期的行。
现在,我想删除日期列包含某个日期的行以及之前的任何行。例如,如果某个日期是05/04/2020,那么我需要删除直到第 8 行的所有行,以便剩余的 DataTable 看起来像
9 | 05/05/2020 Tue | DAF | AAG | ...
我的问题是,首先我不知道如何过滤没有列名的 DataTable。我考虑过在不覆盖第一个实际数据行的情况下分配标题行,但似乎这是很多工作,只是为了过滤。其次,我不确定如何使用这些条件((a)第二列包含某个日期,AND(b)任何包含该日期之前日期的行)。
private void DeleteRows(DateTime certainDate){
DataRow[] targetRowsToDelete = dtFromExcel.Select(/* Not sure what to put in here */);
foreach (DataRow row in targetRowsToDelete)
{
if (Convert.ToDateTime(row[1].ToString().Split(c" ")[0]) <= certainDate)
DtFromExcel.Rows.Remove(row);
}
}
我不想循环遍历整个 DataTable,因为这个过程经常发生在我的程序中。
【问题讨论】:
标签: c# .net select datatable filtering