2010-12-10 72 views

回答

2
DateTime start = DateTime.Now; 
List<DateTime> last12 = (from r in Enumerable.Range(1,12) select start.AddMonths(0-r)).ToList(); 
+0

我喜歡它,非常漂亮。 – 2010-12-10 21:24:10

1

目前尚不清楚您是否希望當前的月份不計算在內,但這會指向您正確的方向,您可以根據需要進行相應編輯。

DateTime now = DateTime.Now; 
DateTime currentMonth = new DateTime(now.Year, now.Month, 1); 
var lastTwelveMonths = 
    Enumerable.Range(0, 12) 
       .Select(i => -i) 
       .Select(monthsToAdd => currentMonth.AddMonths(monthsToAdd)) 
       .ToList(); 
+0

這是definetely過度'。選擇(I => -i)' – Andrey 2010-12-10 21:10:47

+0

你能只下降了'。選擇(ⅰ=> - i)'並使用'Select(monthsToAdd => currentMonth.AddMonths(-monthsToAdd))'而不是? – 2010-12-10 21:25:10

+0

@Abe Miessler:是的,你完全可以,但是'monthsToAdd'沒有正確命名。 – jason 2010-12-10 21:54:33

1

Foreach在技術上不是Linq方法。它作爲List類中的具體方法存在,但不在任何接口中。

var now = DateTime.Now; 
var months = Enumerable.Range(1, 12).Select(n => now.AddMonths(-n)); 

foreach (var month in months) 
{ 
    Console.WriteLine(month.ToString("MMMM")); 
} 

可生產(丹麥)

november 
oktober 
september 
august 
juli 
juni 
maj 
april 
marts 
februar 
januar 
december 
+1

你的代碼有一個令人討厭的bug,除非你非常小心,否則它將不會在你的單元測試中出現,但最終會殺死你。您可能會遇到'DateTime.Now'問題。想象一下,當這個語句開始執行時,它是'new DateTime(2010,12,31,23,59,59,999)',並且執行需要超過一毫秒的時間。 – jason 2010-12-10 21:13:52

+0

@Jason如此真實,更新了代碼以製作DateTime.Now的本地副本:) – 2010-12-10 21:16:33

相關問題