2010-08-20 5 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

.Данные отделки от часа и т. Д., Давая вам только дату. Попробуйте сгруппировать по результату. Время. Вместо этого.

0

Попробуйте преобразовать group result by result.Time.Date.Hour в значение часа непосредственно с использованием преобразования DateTime, а не с использованием свойства объекта Time. Оператор LINQ может останавливать операцию группировки в свойстве Time.

1

Когда вы используете .Date на DateTime, время будет установлено равным нулю. Так что используйте это:

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.Hour к result.Time.Hour

+0

Gr8. Большое спасибо. Изменяя его на результат. Время. – Jai

Смежные вопросы