2011-11-28 10 views

Trả lời

4

này sẽ cung cấp cho những gì bạn đang tìm kiếm:

// 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) }); 

Đây là mã bạn sẽ sử dụng:

// 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

cách tiếp cận của bạn trông đẹp nhất :) –

0

Chỉ cần truy xuất một danh sách của DateTime từ DataColumn của bạn, Foreach hàng trong DataColumn của bạn thêm phần tử hiện hành vào danh sách bạn của DateTime.

List<DateTime> và sử dụng phương pháp Sort sau đó nhận giá trị đầu tiên và cuối cùng.

Tùy thuộc vào phiên bản khuôn khổ của bạn, ví 2.0 sử dụng ở trên, cho >=3.5 bạn có thể sử dụng MaxMin hoặc Với LINQ .OrderByDesc(p => p.X).FirstOrDefault(); vào Danh sách DateTime bạn

+1

Khi bạn có Danh sách <> bạn cũng có thể sử dụng Max() và Min(). Nhưng tôi nghĩ rằng đây là về việc nhận được danh sách. –

+0

@Henk, Bạn tìm phương pháp đó ở đâu? Max() và Min(). –

+0

Trong 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

Để thêm vào các câu trả lời từ kyle, không phải là nó dễ dàng hơn để chỉ cần làm:

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

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