0

forループを使用して、データベースから毎日のデータをカウントしたい。ここでは、日付のみの値から 1 日の始まり (午前 12 時から開始) とその日の終わり (午後 12 時) を取得する方法がわかりません。以下のコードでは、startDate と endDate には日付値 (2012 年 2 月 11 日など) しかありません。

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);
 }
4

2 に答える 2

2

nこれに対処する最善の方法は、 dayの午前 0 時と day の午前 0 時に、小なり/大なり演算子の適切な組み合わせを使用することです。n+1

与えられた日、例えば

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

その日の午前 0 時を取得する (その日の開始)

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

翌日の午前0時を取得するには、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);
}
于 2012-08-24T08:40:19.773 に答える
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;
}
于 2012-08-24T08:57:31.513 に答える