2011-11-28 99 views

回答

4

这将使你在找什么:

// 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(); 
+1

你的做法是最好看:) –

0

从您的DataColumn只是retreive日期时间的列表, 的foreach排在你的DataColumn当前元素添加到您的DateTime的名单。然后

List<DateTime>和使用Sort方法得到的第一个和最后一个值。

根据你的框架版本,上面的2.0使用,为>=3.5 可以使用MaxMin 或 使用LINQ .OrderByDesc(p => p.X).FirstOrDefault();您的DateTime名单

+1

一旦你的名单<>你还不如用MAX()和MIN()。但我认为这是关于获取名单。 –

+0

@Henk,你在哪里找到这些方法? Max()和Min()。 –

+0

Linq-to-Objects –

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"] 
         ) 
         ); 
10
object maxDate = dataTable.Compute("MAX(TheDateColumnName)", null); 
object minDate = dataTable.Compute("MIN(TheDateColumnName)", null); 
2

为了增加从凯尔的答案,是不是更容易只是做:

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

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