【发布时间】:2021-05-26 15:34:07
【问题描述】:
我正在将 Excel 工作表导出到数据表 dt。
然后我有这个设置日期格式的代码:
CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.DateTimeFormat.ShortDatePattern = "yyyy-MMM-dd";
culture.DateTimeFormat.LongTimePattern = "";
Thread.CurrentThread.CurrentCulture = culture;
我的过滤字符串如下:
string strFilter = "CONVERT([Creation date], 'System.DateTime') <= '2021-02-23' AND CONVERT([Creation date], 'System.DateTime') >= '2020-12-01'";
然后我正在执行一个创建过滤数据视图的方法。
public DataTable filterDataTable(DataTable dt, string filter) {
DataView dv = new DataView(dt);
dv.RowFilter = filter;
DataTable dt2 = dv.ToTable();
return dt2;
}
执行上述操作后,我收到 System.Data.Evaluate.Exception 类型的异常和消息:“找不到列 [OK]。”结果:-2146232032。
在源 Excel 文件中,我要过滤的列名称是“创建日期”,此列在 Excel 中被识别为常规格式。列中的示例值:2020-12-29 14:05:33、2020-07-03 13:05:19。
如何使用日期条件过滤此数据视图?
编辑 - 解决方案
在过滤之前,我创建了一个 DateTime 类型的新列“Creation_date”,并添加了旧列中的解析值。
public DataTable getDtWithDateType(DataTable dt)
{
dt.Columns.Add("Creation_date", typeof(DateTime));
foreach(DataRow row in dt.Rows)
{
row["Creation_date"] = DateTime.ParseExact(row["Creation date"].ToString(), "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
}
return dt;
}
一旦我有了扩展的 DataTable,我就能够实现 Svetoslav Angelov 提出的 Linq 解决方案。
【问题讨论】:
-
我正在研究由以前的员工创建的解决方案。另外,据我所知 CopyToDataTable() 方法存在一些问题。
标签: c# excel datatable dataview