2012-08-24 73 views
0

我想使用for循環從數據庫中統計每天的數據。在這裏,我不知道從當天的價值開始的一天(從上午12點開始)和當天結束(下午12點)。在下面的代碼中,startDate和endDate只有日期值,例如2012年2月11日。僅將日期轉換爲c#中的日期和時間格式

for (DateTime dates = startDate; dates <= endDate; dates.AddDays(1)) 
{ 
    DateTime BeginingOfDay = begining of value variable dates; // 2/2/2012 00:00:00 
    DateTime EndOfDay = at end of value variable dates; // 2/2/2012 23:59:59 
    int count = (from u in db.CDRs where (u.StartTime >= BeginingOfDay && u.StartTime <= EndOfDay) select u).Count();; 

    dictionary.Add(dates.ToString("MM/dd/yyyy"), count); 
} 
+1

爲什麼你不完全在數據庫中計算,而不是循環所有的日子? –

回答

2

應對這種情況的最好辦法是在n天,午夜使用每種不超過/ GREATERTHAN經營權結合午夜天n+1

所以賦予了天,例如

var date = new Date(2012,8,24); // today 

得到當天午夜(日開始)

var start = new Date(date.Year, date.Month, date.Day, 0,0,0); // could also be date.Date 

,並獲得第二天午夜剛剛加1天

var end = start.AddDays(1); 

現在使用大於或 - 相等爲起點,和小於的結尾:

var inRange = x.StartTime>=start && x.EndTime<end 

拼湊成你的例子就變成:

for (DateTime dates = startDate; dates <= endDate; dates.AddDays(1)) 
{ 
    DateTime BeginingOfDay = new DateTime(dates.Year,dates.Month,dates.Day,0,0,0); 
    DateTime EndOfDay = BeginingOfDay.AddDays(1); 
    int count = (from u in db.CDRs where (u.StartTime >= BeginingOfDay && u.StartTime < EndOfDay) select u).Count();; 

    dictionary.Add(dates.ToString("MM/dd/yyyy"), count); 
} 
+0

我在代碼中遇到了問題。變量日期不會由for循環的AddDays(1)增加,所以異常被拋出字典有重複鍵。我有循環中的位置中斷點,它不會增加一天。請告訴我什麼可能是錯誤 – CodeManiac

+1

@CodeManiac - 你爲循環應該有'日期=日期.AddDays(1)'末尾 - 否則'日期'變量將不會增加 – Jamiec

1

這應該讓你的結果你想要的:

using(var dataContext = new YourDataContext()) 
{ 
    var dictionary = dataContext.CDRs.GroupBy(u => new 
    { 
     u.StartTime.Year, 
     u.StartTime.Month, 
     u.StartTime.Day 
    }) 
    .Select(g => new{ Date = g.Key, Count = g.Count() }) 
    .ToDictionary(g => new DateTime(g.Key.Year, g.Key.Month, g.Key.Day), g=>g.Count); 
    return dictionary; 
} 
+0

+1的數據解決方案 – Jamiec

相關問題