4

ログを含むテーブルがあり、次のように 1 日あたりのログを数えています。

// Count logs by day
IList<DataModel> models = _context.Logs
  .Where(x => x.Created >= dateMinimum && x.Created <= dateMaximum)
  .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() })
  .AsEnumerable()
  .Select(x => new DataModel { Date = new DateTime(x.Year, x.Month, x.Day), LogsCount = x.Count })
  .ToList();

// Fill empty days with dates which contains all days in range
models.AddRange(dates.Where(x => !models.Any(y => y.Date == x.Date)).Select(x => new DataModel { Date = x, LogsCount = 0 }));

タイプに関係なく、日ごとにすべてのログをカウントしたい場合、これは機能します。

しかし、日と種類 (エラー、警告、情報など) でログを数えたいと思います。

x.Type をグループに追加しようとしましたが、最後に 3 つのアイテムしか取得できません。

現時点で私の DataModel は次のとおりです。

public class DataModel
{
    public DateTime Date { get; set; }
    public Int32 LogsCount { get; set; }
}

しかし、多分それは次のようなものでなければなりません:

public class DataModel
{
    public DateTime Date { get; set; }
    public KeyValuePair<String, Int32> LogsCount { get; set; }
}

LogsCount には、Type を保持する文字列と、カウントを含む Int32 があります。

これどうやってするの?

4

2 に答える 2

1

このようなことを試しましたか?

IList<DataModel> models = Logs
  .Where(x => x.Created >= dateMinimum && x.Created <= dateMaximum)
  .GroupBy(x => new { Year = x.Created.Year, Month = x.Created.Month, Day = x.Created.Day, Type = x.Type })
  .Select(x => new { Year = x.Key.Year, Month = x.Key.Month, Day = x.Key.Day, Count = x.Count(), Type = x.Key.Type })
  .AsEnumerable()
  .Select(x => new DataModel { Date = new DateTime(x.Year, x.Month, x.Day), LogsCount = x.Count, Type = x.Type })
  .ToList()


public class DataModel
{
    public DateTime Date { get; set; }
    public Int32 LogsCount { get; set; }
    public string Type { get; set; }
}
于 2012-10-22T14:53:52.770 に答える