2012-03-29 99 views
0

我使用EF按月,按天或按小時計算帖子。填充DateTime和Int間隙

我最終列出了DateTime/Int,其中有一些DateTime間隙。

的差距是年,年算起,在幾個月,按月計算的時候,...

是否有寫按年或月填補空白的日期時間延長的方式,...

甚至是另一個填補int空白的擴展?

謝謝你, 米格爾

回答

1

不看你的代碼,你爲什麼不預填充你的表與所有的數,您所需要的時間(即無缺口)的0

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

這將保證你的名單永遠不會有空白。您可以使用sql日期函數爲這一代編寫腳本,或使用Excel並導入到數據庫中。

+0

這可能看起來很亂,但我會使用這個解決方案。簡單。 – usr 2012-03-30 23:06:28

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

基本上,我一直在尋找一種方式,較少的步驟來做到這一點...

也許使用表聯盟或加入...

我只是填補我使用的許多步驟...

謝謝你, 米格爾