数据库表:
Id | StartDate | EndDate | Value |
1 | 2007-01-01 | 2007-01-05 | 1 |
2 | 2007-01-08 | 2007-01-10 | 2 |
每条数据中的开始日期,结束日期构成一个时间段,表中所有数据的时间段不重叠。任意插入一条数据,要求调整原表中数据的开始日期和结束日期,使表中原有数据和新插入数据不会有时间段的重叠。
例如,插入一条时间段为2007-01-04至2007-01-08的数据,表中最终结果为:
Id | StartDate | EndDate | Value |
1 | 2007-01-01 | 2007-01-03 | 1 |
2 | 2007-01-09 | 2007-01-10 | 2 |
3 | 2007-01-04 | 2007-01-08 | 3 |
我的做法是先将表中所有与待插入数据时间段重叠的数据取出放入ArrayList中,然后对这个List进行处理。具体算法如下:
/**/
/// <summary>
/// 时间段重叠数据处理函数
/// </summary>
/// <param name="inResourceRPList">处理前房价信息列表</param>
/// <param name="inNewRP">待插入房价信息</param>
/// <returns>
/// ArrayList
/// </returns>
private ArrayList RoomPriceDivide(ArrayList inResourceRPList, RoomPriceNormalVo inNewRP)
... {
Log.Debug("RoomPriceNormalLogic:RoomPriceDivide Start");
/// 时间段重叠数据处理函数
/// </summary>
/// <param name="inResourceRPList">处理前房价信息列表</param>
/// <param name="inNewRP">待插入房价信息</param>
/// <returns>
/// ArrayList
/// </returns>
private ArrayList RoomPriceDivide(ArrayList inResourceRPList, RoomPriceNormalVo inNewRP)
... {
Log.Debug("RoomPriceNormalLogic:RoomPriceDivide Start");