Заполнение пробелов DateTime и Int - PullRequest
0 голосов
/ 29 марта 2012

Я считаю сообщения по месяцам, дням или часам, используя EF.

Я получаю список DateTime / Int, в котором есть некоторые пробелы DateTime.

Разрывы в годах, при подсчете по годам, в месяцах, при подсчете по месяцам, ...

Есть ли способ написать расширение, которое заполняет пробелы DateTime по году или месяцу, ...

Или даже другое расширение, которое заполняет пробелы?

Спасибо, Miguel

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Не глядя на ваш код, почему бы вам не заполнить ваши таблицы всеми нужными вам датами (т.е. без пропусков) со счетом 0.

Date     Count
Jan2012  0
Feb2012  0
Mar2012  0
...
Dec2049  0

Это гарантирует, что в вашем списке никогда не будет пробелов. Вы можете написать это поколение с помощью функций даты SQL или использовать Excel и импортировать в базу данных.

0 голосов
/ 31 марта 2012

В основном я делаю следующее:

// Tupple to hold data
IList<Tuple<DateTime, Int32>> data = new List<Tuple<DateTime, Int32>>();

// Get data from repository (Count by year) and add to Tupple
_repository.Set<Post>()
.Where(x => x.Created >= start && x.Created <= end)
.GroupBy(x => new { Year = x.Created.Year })
.Select(x => new { Year = x.Key.Year, Count = x.Count() })
.ToList().ForEach(x => data.Add(new Tuple<DateTime, Int32>(new DateTime(x.Year, 1, 1), x.Count)));

// Fill empty years with 0 as count
for (Int32 i = 0; i <= (end - start).TotalYears; i++)
  if (!data.Any(x => x.Item1 == start.AddYears(i)))
    data.Add(new Tuple<DateTime, Int32>(start.AddYears(i), 0));

// Resort data
data = data.OrderBy(x => x.Item1).ToList();

По сути, я искал способ сделать это за несколько шагов ...

Может быть, используя таблицу Union или Join ...

Я просто заполняю, я использую много шагов ...

Спасибо, Miguel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...