6

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

谢谢

4

6 回答 6

16
object maxDate = dataTable.Compute("MAX(TheDateColumnName)", null);
object minDate = dataTable.Compute("MIN(TheDateColumnName)", null);
于 2012-06-11T18:18:50.130 回答
5

这会给你正在寻找的东西:

// 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();
于 2011-11-28T17:07:19.603 回答
2

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

最佳日期:

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

最早的日期:

var first = tbl.AsEnumerable()
               .Min(r => r.Field<DateTime>(col.ColumnName));
于 2012-11-13T10:52:38.870 回答
0

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

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

根据您的框架版本,在2.0上面使用,>=3.5 您可以在 DateTime 列表上使用MaxandMin 或 With linq .OrderByDesc(p => p.X).FirstOrDefault();

于 2011-11-28T16:45:52.973 回答
0
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"]
                          )
                        );
于 2011-11-28T17:31:59.920 回答
0

对我来说最简单:使用表“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
于 2020-02-08T11:12:24.717 回答