【问题标题】:DataTable RowFilter custom distinctDataTable RowFilter 自定义不同
【发布时间】:2014-09-11 11:59:35
【问题描述】:

我使用 C# 在我的 DataTable 中有一个包含日期的列。像这样的:

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

如果我这样做:MyDataView.ToTable(true, MyDateField)... 那么我会得到上面的所有日期,因为它们都是唯一的。

我想要做的是根据日期部分完全忽略时间部分。

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

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

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

【问题讨论】:

    标签: c# .net-4.0 datatable dataset dataview


    【解决方案1】:

    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();
    

    【讨论】:

    • 谢谢。我将其标记为答案,因为这对我有用,尽管在 linq 中处理潜在的空值让我有点想不通。
    【解决方案2】:

    你可以的

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

    查看演示:https://dotnetfiddle.net/WBvI1c

    【讨论】:

    • 甚至dates.Select(x =&gt; x.Date).Distinct()
    • OP 要求在数据表上应用过滤器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多