как найти максимум в столбце данных datetime? - PullRequest
6 голосов
/ 28 ноября 2011

У меня есть DataColumn of DateTime, я хотел бы знать, как я могу иметь только более раннюю дату (мин) и более позднюю дату (макс).

Спасибо

Ответы [ 5 ]

13 голосов
/ 11 июня 2012
object maxDate = dataTable.Compute("MAX(TheDateColumnName)", null);
object minDate = dataTable.Compute("MIN(TheDateColumnName)", null);
4 голосов
/ 28 ноября 2011

Это даст вам то, что вы ищете:

// 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();
2 голосов
/ 13 ноября 2012

Чтобы добавить к ответу от Кайла, не проще ли просто сделать:

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

и

var first = tbl.AsEnumerable()
               .Min(r => r.Field<DateTime>(col.ColumnName));
0 голосов
/ 28 ноября 2011
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"]
                          )
                        );
0 голосов
/ 28 ноября 2011

Просто получите список DateTime из вашего DataColumn, Каждая строка в вашем DataColumn добавляет текущий элемент в ваш список DateTime.

List<DateTime> и используйте метод Sort, затем получите первое и последнее значения.

В зависимости от версии фреймворка, для 2.0 используйте выше, для >=3.5 Вы можете использовать Max и Min или же С linq .OrderByDesc(p => p.X).FirstOrDefault(); в вашем списке DateTime

...