我使用EF按月,按天或按小時計算帖子。填充DateTime和Int間隙
我最終列出了DateTime/Int,其中有一些DateTime間隙。
的差距是年,年算起,在幾個月,按月計算的時候,...
是否有寫按年或月填補空白的日期時間延長的方式,...
甚至是另一個填補int空白的擴展?
謝謝你, 米格爾
我使用EF按月,按天或按小時計算帖子。填充DateTime和Int間隙
我最終列出了DateTime/Int,其中有一些DateTime間隙。
的差距是年,年算起,在幾個月,按月計算的時候,...
是否有寫按年或月填補空白的日期時間延長的方式,...
甚至是另一個填補int空白的擴展?
謝謝你, 米格爾
不看你的代碼,你爲什麼不預填充你的表與所有的數,您所需要的時間(即無缺口)的0
Date Count
Jan2012 0
Feb2012 0
Mar2012 0
...
Dec2049 0
這將保證你的名單永遠不會有空白。您可以使用sql日期函數爲這一代編寫腳本,或使用Excel並導入到數據庫中。
我在做什麼基本上是這樣的:
// 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();
基本上,我一直在尋找一種方式,較少的步驟來做到這一點...
也許使用表聯盟或加入...
我只是填補我使用的許多步驟...
謝謝你, 米格爾
這可能看起來很亂,但我會使用這個解決方案。簡單。 – usr 2012-03-30 23:06:28