2012-03-29 4 views
0

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

В итоге я получаю список DateTime/Int, где есть пробелы в DateTime.

Пробелы в годы, при подсчете в год, за несколько месяцев, при подсчете в месяц, ...

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

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

Спасибо, Miguel

ответ

1

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

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

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

+0

Это может показаться хакерским, но я бы использовал именно это решение. Просто. – usr

0

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

// 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(); 

В основном я искал способ сделать это меньше шагов ...

Может быть с помощью таблицы Союз или присоединиться ...

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

Спасибо, Miguel

Смежные вопросы