可以使用LINQ创建过去12个月的列表吗?

时间:2010-12-10 21:01:54

标签: .net linq linq-to-objects

我希望能做到这样的事情:

        List<DateTime> last12 = new List<DateTime>(12);
        last12.ForEach(t=>t.AddMonths(-{t.Index}));

但还没有弄明白如何做{t.Index}部分......

这样的事情可能吗?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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();

答案 2 :(得分: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