DataTable行筛选器自定义不同

本文关键字:自定义 筛选 DataTable | 更新日期: 2023-09-27 18:21:40

我的DataTable中有一列使用C#的日期。类似这样的东西:

2014/06/26上午11:23
2014/06/26上午11:45
2014/06/26 12:23 AM
2014/06/27 01:30 PM
2014/06/27 01:50 PM
2014/06/27下午02:30
2014/06/29 04:00 PM
2014/06/29 05:30 PM
2014/06/29 06:15 PM

如果我这样做:MyDataView.ToTable(true,MyDateField)。。。然后我得到上面所有的日期,因为它们都是独一无二的。

我想做的是基于日期部分而完全忽略时间部分来进行区分。

我在上面的日期中寻找的结果是:

2014/06/26
2014/06/27
2014/06/29

这必须发生在我的DataTable中。通常,在数据到达应用程序之前,我会在SQL中完成所有这些事情,但在这里我别无选择。

DataTable行筛选器自定义不同

DataView.ToTable(true, "DateColumn")按预期返回不同的DateTime值。

要根据日期部分筛选出记录,您可以从数据表中选择不同的行,如下所示:

var rows = dt.AsEnumerable().Select(r => ((DateTime)r["DateColumn"]).Date).Distinct();
foreach (var row in rows)
{
}

DataTable distinctTable = dt.AsEnumerable()
                       .GroupBy(r => r.Field<DateTime>("DateColumn").Date)
                       .Select(g => g.First())
                       .CopyToDataTable();

您可以进行

dates.Select(x => new DateTime(x.Year, x.Month, x.Day)).Distinct()

请参阅演示:https://dotnetfiddle.net/WBvI1c