2015-10-05 59 views
0

我有一个列表List<CalendarEvent> _eventsList从类中自定义列表数据拆分CalendarEvent如何在自定义格式

public class CalendarEvent 
{ 
    public int id { get; set; } 
    public DateTime start { get; set; } 
    public DateTime end { get; set; } 
    public string subject { get; set; } 
} 

这是示例事件之一的我在列表_eventsList

id  start   end    subject 
--- ---------- ------------  ------------------ 
21  05.10.2015  01.01.2016  its a long Event 

现在,如果start dateend date之间的差异长于1个月,如上面的情况,那么我想在C#代码中按如下方式拆分它:

 start   end    subject 
    ---------- ------------  ---------- 
    05.10.2015  31.10.2015  its a long Event 
    01.11.2015  30.11.2015  its a long Event 
    01.12.2015  31.12.2015  its a long Event 
    01.01.2016  01.01.2016  its a long Event 

此问题是How to bind Repeater with list of objects GroupBy的扩展。

我其实需要一些想法,我如何分割它。

+1

你正在面对的问题是什么? –

+0

我其实需要一些想法,我如何分割它。 – Kamran

+1

我想他希望每个月都有一个这样的条目。 – Andre

回答

2

那么你可以试试这个:

DateTime MonthStart(DateTime d) { return d.AddDays(-d.Date.Day+1); } 
DateTime MonthEnd(DateTime d) { return MonthStart(d).AddMonths(+1).AddDays(-1); } 

IEnumerable<Tuple<DateTime,DateTime>> SplitDates(DateTime start, DateTime end) 
{ 
    var dates = new List<Tuple<DateTime,DateTime>>(); 
    var t = start; 
    while (t<=end) 
    { 
     if (MonthEnd(t)<=end) 
     { 
      dates.Add(Tuple.Create(t,MonthEnd(t))); 
     } 
     else 
     { 
      dates.Add(Tuple.Create(t,end)); 
     } 
     t = MonthEnd(t).AddDays(1); 
    } 
    return dates; 
} 

void Main() 
{ 
    var start = new DateTime(2015,10,05); 
    var end = new DateTime(2016,01,01); 
    var dates = SplitDates(start,end); 
    dates.ToList().ForEach(d => Console.WriteLine("{0} -> {1}",d.Item1.ToShortDateString(),d.Item2.ToShortDateString())); 
} 

上面运行产生

05/10/2015 -> 31/10/2015 
01/11/2015 -> 30/11/2015 
01/12/2015 -> 31/12/2015 
01/01/2016 -> 01/01/2016 

编辑 几道运行:

2015-10-052015-11-01之间产生

运行
05/10/2015 -> 31/10/2015 
01/11/2015 -> 01/11/2015 

2015-12-012015-12-10

之间产生

10/12/2015 -> 12/12/2015 
运行,所以这应该是你所需要的。

+0

(更正了错字) – rbm