2012-08-16 47 views
1

我有一個數據表,其中包含許多來自多個事件文件的字段。我需要能夠選擇不同的時間。該日期時間字段的格式如下MM/dd/yyyy HH:mm:ss ..我想這一點:Long DateTime字段將DataTable中的Datetime字段縮短而不使用LINQ獲取不同的值

dpall = RollUpValuesFunctions.jobTableFinalCSVOutput.DefaultView.ToTable(); 

什麼,我想知道是如果有申請的日期時間字段約束只能獲得一個獨特的約會像MM/dd/yyyy HH:mm的方法嗎?
每分鐘有幾百條記錄,但爲了我的目的,我只需要那一分鐘的記錄之一。

而且這是在C#中

+1

爲什麼不使用LINQ? – 2012-08-16 12:41:00

回答

0

鑑於以下數據:

var dt = new DataTable(); 
dt.Columns.Add(new DataColumn("Time", typeof(DateTime))); 
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 0, 0)); 
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 0, 0)); 
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 0, 1)); 
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 0, 2)); 
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 4, 2)); 
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 5, 5)); 
dt.Rows.Add(new DateTime(2000, 12, 31, 12, 5, 2)); 

的obvoius LINQ的方法是

var result = from row in dt.AsEnumerable() 
      let d = row.Field<DateTime>("Time") 
      group row by new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, 0) into g 
      select g.First(); 

foreach (DataRow row in result) 
    Console.WriteLine(row["Time"]); 

但既然你問了一個非LINQ的解決方案,爲什麼不只是遍歷每一行,擺脫seconds部分時間,並使用DataView來做Distinct部分:

foreach (DataRow row in dt.Rows) 
{ 
    DateTime d = row.Field<DateTime>("Time"); 
    row["Time"] = new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, 0); 
    // or use "tricks" like this 
    // row["Time"] = d.AddTicks(-(d.Ticks % TimeSpan.TicksPerMinute)); 
} 

foreach(DataRow r in new DataView(dt).ToTable(true).Rows) 
    Console.WriteLine(r["Time"]); 

如果你不想改變你的DataTable,你可以先複製它。

+0

謝謝你,工作得很好。 – user1588668 2012-08-16 13:21:59

相關問題