2010-08-20 67 views
1

我正面臨着LINQ的問題。LINQ組問題

下面是代碼,

public class TimeObject 
    { 
     public DateTime Time { get; set; } 
    } 

    private void TestLINQ() 
    { 
     List<TimeObject> results = new List<TimeObject>(); 

     results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 0, 10, 0)}); 
     results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 0, 20, 0)}); 
     results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 0, 30, 0)}); 
     results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 0, 40, 0)}); 
     results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 0, 50, 0)}); 
     results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 1, 10, 0)}); 
     results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 1, 20, 0)}); 
     results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 1, 30, 0)}); 
     results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 1, 40, 0)}); 
     results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 2, 15, 0)}); 
     results.Add(new TimeObject() { Time = new DateTime(2010, 8, 1, 2, 30, 0)}); 

     var counts = from result in results 
         group result by result.Time.Date.Hour into groupedResult 
         select new { Hour = groupedResult.Key, Count = groupedResult.Count() }; 

     foreach (var count in counts) 
     { 
      MessageBox.Show(count.Hour + " - " + count.Count); 
     } 
    } 

我期望的輸出是 0 - 5, 1 - 4, 2 - 2

但我總是得到0 - 12爲什麼是不是按小時分組?

請幫幫我。謝謝。

回答

2

。日期關閉小時等部分,給你一個日期。嘗試按result.Time.Hour進行分組。

0

嘗試直接使用DateTime轉換將group result by result.Time.Date.Hour轉換爲小時值,而不是使用Time對象的屬性。 LINQ語句可能會停止Time屬性中的分組操作。

1

當您在DateTime上使用.Date時,該時間將設置爲零。因此,使用這樣的:

var counts = from result in results 
      group result by result.Time.Hour into groupedResult 
      select new { Hour = groupedResult.Key, Count = groupedResult.Count() }; 
1

變化result.Time.Date.Hourresult.Time.Hour

+0

GR8。非常感謝。通過改變它的結果.Time.Hour它的作品:) – Jai 2010-08-20 23:30:50