2016-07-12 76 views
0

我試圖按小時對記錄列表進行分組,並存儲每小時的記錄數。這裏是我的代碼:.NET按分組記錄時不可能使用選擇日期時間

 DateTime firstTimeStamp = myRecords.DataBaseRecords.First().TimeStamp; 
     Statistics = myRecords.DataBaseRecords 
     .GroupBy(x => x.TimeStamp.Hour) 
      .Select(group => new GraphModel() { Date =firstTimeStamp.AddHours(group.Key), Value = group.Count() }) 
     .ToList(); 

的問題是,當我在選擇機能的研究,我無法查看在該日期時間了,所以現場group.key包含值24。0之間,我只需要按小時和每小時分組所有記錄,我需要在Value參數中包含記錄數。

+0

爲什麼不?怎麼了? – SLaks

+0

它實際上不會返回比24小時更長的時間,因此如果下一個日期時間在3天內,它不會返回82小時,但會返回0:/ – KingOfBabu

+0

您對此有何期待?當你花一個小時它將返回一個從0到23的值。日期是一個單獨的值。 –

回答

2

你必須按絕對時間的數據作爲第一時間戳,即計算每個小時的差值TimeStamp值:

Statistics = myRecords.DataBaseRecords 
         .GroupBy(x => DbFunctions.DiffHours(firstTimeStamp, x.TimeStamp) into g 
         .Select(g => new GraphModel 
         { 
          Date = g.FirstOrDefault().TimeStamp, 
          Value = g.Count() 
         }; 

如果這是普通的LINQ到對象(未實體框架),你可以替換...

DbFunctions.DiffHours(firstTimeStamp, x.TimeStamp) 

...通過

(x.TimeStamp - firstTimeStamp).TotalHours 

如果它的LINQ to SQL,使用

SqlMethods.DateDiffHour(firstTimeStamp, x.TimeStamp) 
0

也許這樣的事情可能會制定出適合你:特定上述回答

DateTime myDateTime = new DateTime(DateTime.Parse(firstTimeStamp).AddHours(group.Key).Ticks); 

問:

...Date = new DateTime(DateTime.Parse(firstTimeStamp).AddHours(group.Key))... 
相關問題