一千萬個為什麽

搜索

用LINQ爆炸一系列日期

如果我有一對日期,並且我想生成它們之間所有日期的列表(包括),我可以執行以下操作:

System.DateTime s = new System.DateTime(2010, 06, 05);
System.DateTime e = new System.DateTime(2010, 06, 09);
var list = Enumerable.Range(0, (e - s).Days)
    .Select(value => s.AddDays(value));

我堅持的是,我有一個日期對的列表,我想要將它們分解為它們之間所有日期的列表。例:

{2010-05-06, 2010-05-09}, {2010-05-12, 2010-05-15}

應該導致

{2010-05-06, 2010-05-07, 2010-05-08, 2010-05-09, 2010-05-12, 2010-05-13, 2010-05-14, 2010-05-15}

請註意,保證日期對不會相互重疊。

最佳答案

var result = listOfPairs.SelectMany(pair =>
                 Enumerable.Range(0, (pair.Item2 - pair.Item1).TotalDays)
                           .Select(days => pair.Item1.AddDays(days)));

轉載註明原文: 用LINQ爆炸一系列日期