1

次のように、1 日あたりに作成されたユーザーの数を数えています。

IEnumerable<DateTime> dates = GetAllDatesForPeriod();

var rows = context.Users
  .Where(x => x.Created >= minDate && x.Created <= max.Date)
  .GroupBy(x => new { Year = x.Created.Year, Month = x.Created.Month, Day = x.Created.Day })
  .Select(x => new { Year = x.Key.Year, Month = x.Key.Month, Day = x.Key.Day, Count = x.Count() }).ToList()
  .Select(x => new DataModel { Date = new DateTime(x.Year, x.Month, x.Day), Users = x.Count }).ToList();

  rows.AddRange(dates.Where(x => !rows.Any(y => y.Date == x)).Select(x => new DataModel { Date = x, Users = 0 }));

2 番目の Select は、Ef クエリで DateTime を作成できないためです。

AddRange は、不足している日付をカウント = 0 で埋めます。

このコードは機能しています。しかし、これを単純化する方法はありますか?

ありがとう、ミゲル

4

1 に答える 1

1

主なクエリは次のとおりです。

var rows = context.Users
    .Where(x => x.Created >= minDate && x.Created <= max.Date)
    .GroupBy(u => EntityFunctions.TruncateTime(u.Created))
    .Select(g => new DataModel { Date = g.Key, Count = g.Count() }).ToList();

その後、既に行ったように欠落している日付を追加できます。

于 2012-10-10T22:05:40.520 に答える