用LINQ爆炸一系列日期

Rob*_*and 4 c# 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));
Run Code Online (Sandbox Code Playgroud)

我坚持的是,我有一个日期对的列表,我想要将它们分解为它们之间所有日期的列表.例:

{2010-05-06, 2010-05-09}, {2010-05-12, 2010-05-15}
Run Code Online (Sandbox Code Playgroud)

应该导致

{2010-05-06, 2010-05-07, 2010-05-08, 2010-05-09, 2010-05-12, 2010-05-13, 2010-05-14, 2010-05-15}
Run Code Online (Sandbox Code Playgroud)

请注意,保证日期对不会相互重叠.

dtb*_*dtb 6

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

  • 这对我很有用.我只需要爆炸一个日期范围,这就是我使用的:`Enumerable.Range(0,(int)(endDate - startDate).TotalDays).Select(days => startDate.AddDays(days));` .请注意,我必须在EndDate中添加1天以确保最后一天在那里. (2认同)