2011-11-28 11 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に、あなたのDataColumnから のforeach列をDateTimeの一覧を盗ん日時のリストに現在の要素を追加します。

List<DateTime>を使用し、Sortメソッドを使用して、最初と最後の値を取得します。

あなたのフレームワークのバージョンに依存し、上記2.0使用するため、>=3.5 のためにあなたの日付と時刻のリストにLINQ .OrderByDesc(p => p.X).FirstOrDefault();MaxMin または を使用することができます

+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)); 
関連する問題