Группировка данных по дате и времени с помощью linq

1

Я пытаюсь сгруппировать некоторые временные метки с помощью выражения linq

        var ds = (from wl in dbEntities.tbl_weblog
                  group wl by new
                  {
                      wl.tms_stamp.Value.Date,
                      wl.tms_stamp.Value.TimeOfDay
                  } into dateGrp
                  select new
                  {
                      Date = dateGrp.Key.Date,
                      Time = dateGrp.Key.TimeOfDay,
                      HitCount = dateGrp.Count(),
                      TotalKB = dateGrp.Sum(m => m.int_bytes).Value / 1024
                  }
                      ).ToList();

        return Helpers.ToDataSet(ds);

Но я получаю ошибку " Указанный член типа" Дата "не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, сущности и свойства навигации сущности. ".

Может ли кто-нибудь помочь мне разрешить это?

Теги:
linq
linq-to-entities

1 ответ

1
Лучший ответ

Linq-To-Entities не имеет сопоставления для DateTime.Date для SQL. Поэтому вместо этого вы должны разбить его на год, месяц, день и час, чтобы получить результаты, которые вы ищете.

var ds = (from wl in dbEntities.tbl_weblog
          group wl by new
             {
                 wl.tms_stamp.Value.Year,
                 wl.tms_stamp.Value.Month,
                 wl.tms_stamp.Value.Day,
                 wl.tms_stamp.Value.Hour
             } into dateGrp
          select new
          {
              Year = dateGrp.Year,
              Month= dateGrp.Month,
              Day= dateGrp.Day,
              Hour= dateGrp.Hour,
              HitCount = dateGrp.Count(),
              TotalKB = dateGrp.Sum(m => m.int_bytes).Value / 1024
          }).ToList();

Затем, когда вы потребляете ds вы можете сместить детали даты вместе.

foreach(var item in ds)
{
    var date = new DateTime(item.Year, item.Month, item.Day);
    var hour = item.Hour;
}
  • 0
    DS используется в dataGridView в приложении Windows Forms, и мне нужно показать количество обращений за каждый час каждого дня. Вот почему мне нужно разделить дату и время дня.
  • 0
    @ onedevteam.com TimeOfDay не будет группировать это по часам. Для этого вам понадобится DateTime.Hour , и вам нужно разбить его на год, месяц и день. Я обновил свой ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню