【问题标题】:how to find the max in a datacolumn of datetime?如何在日期时间的数据列中找到最大值?
【发布时间】:2026-01-17 23:40:01
【问题描述】:

我有一个 DateTime 的 DataColumn,我想知道如何才能只有较早的日期 (min) 和较晚的日期 (max)。

谢谢

【问题讨论】:

  • 只是一个数据列?它是绑定到 DataTable 还是什么的?

标签: c# datetime max datacolumn


【解决方案1】:

只需从您的 DataColumn 中检索 DateTime 列表, DataColumn 中的 Foreach 行将当前元素添加到 DateTime 列表中。

List<DateTime> 并使用Sort 方法然后获取第一个和最后一个值。

取决于你的框架版本,对于2.0 使用上面,对于>=3.5 你可以使用MaxMin 要么 在您的日期时间列表中使用 linq .OrderByDesc(p => p.X).FirstOrDefault();

【讨论】:

  • 一旦你有了 List,你还不如使用 Max() 和 Min()。但我认为这是关于获取列表。
  • @Henk,你在哪里找到这些方法? Max() 和 Min()。
  • @ChristopheDebove 你需要使用 Linq(使用 System.Linq)
  • @Henk,Dave,是的,我看到了,我的 IDE 为我的测试配置了 2.0。
【解决方案2】:

这将提供您正在寻找的内容:

// Initial Code for Testing
DataTable dt = new DataTable();

dt.Columns.Add("Dates", typeof(DateTime));
dt.Rows.Add(new object[] { DateTime.Now });
dt.Rows.Add(new object[] { DateTime.Now.AddDays(1) });
dt.Rows.Add(new object[] { DateTime.Now.AddDays(2) });

这是您将使用的代码:

// Actual Code
DataColumn col = dt.Columns[0]; // Call this the one you have

DataTable tbl = col.Table;

var first = tbl.AsEnumerable()
               .Select(cols => cols.Field<DateTime>(col.ColumnName))
               .OrderBy(p => p.Ticks)
               .FirstOrDefault();

var last = tbl.AsEnumerable()
              .Select(cols => cols.Field<DateTime>(col.ColumnName))
              .OrderByDescending(p => p.Ticks)
              .FirstOrDefault();

【讨论】:

  • 你的方法看起来最好:)
【解决方案3】:
DataTable dt = new DataTable("MyDataTable");
DataColumn dc = new DataColumn("DateColumn");
dc.DataType = typeof(DateTime);
dt.Columns.Add(dc);
for (int i = 0; i <= 5; i++)
{
    DataRow newRow = dt.NewRow();
    newRow[0] = DateTime.Now.AddDays(i);
    dt.Rows.Add(newRow);
}

DateTime maxDate =  
    Convert.ToDateTime(
                        ((from DataRow dr in dt.Rows
                          orderby Convert.ToDateTime(dr["DateColumn"]) descending
                          select dr).FirstOrDefault()["DateColumn"]
                          )
                        );

DateTime minDate = 
    Convert.ToDateTime(
                        ((from DataRow dr in dt.Rows
                          orderby Convert.ToDateTime(dr["DateColumn"]) ascending
                          select dr).FirstOrDefault()["DateColumn"]
                          )
                        );

【讨论】:

    【解决方案4】:
    object maxDate = dataTable.Compute("MAX(TheDateColumnName)", null);
    object minDate = dataTable.Compute("MIN(TheDateColumnName)", null);
    

    【讨论】:

      【解决方案5】:

      要补充 kyle 的答案,这样做不是更容易吗:

      最佳日期:

      var last = tbl.AsEnumerable()
                     .Max(r => r.Field<DateTime>(col.ColumnName));
      

      最早日期:

      var first = tbl.AsEnumerable()
                     .Min(r => r.Field<DateTime>(col.ColumnName));
      

      【讨论】:

        【解决方案6】:

        对我来说最简单: 使用表“Tablename”和列“itemDate”制作数据集,设置Datatyp System.DateTime

        您可以读取日期时间列表中的所有元素并搜索 minDate

        Dim List_Date As New List(Of DateTime)
        Dim minDate As DateTime
        
        For Each elem As DataRow In DataSet1.Tables("Tablename").Rows
                    List_Date.Add(elem.Item("itemDate"))
        Next
        
        minDate = List_Date.Min
        

        【讨论】: