将数据插入范围的中间

时间:2017-07-06 06:00:31

标签: c# sql entity-framework

我有以下型号

public class DailyRoutine
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
    public string Description { get; set; }
}

情境: 何时在初始时创建5条记录,这意味着每天输入5个条目。举个例子2017年5月1日到5月5日。描述有任何字符串。

用户可以在中间添加新记录,以便将以下记录移动并更改为下一天。

预期输出 例如,用户可以在输入和提交中给出日期和描述。如果输入日期为< 5/3/2017' (5月3日),应该在5月2日之后添加条目并将现有的5月3日记录更改为5月4日,5月4日到5月5日等。所以输出就像是5月1日到5月6日,并且给定的输入在5月更新3。

请帮助我解决这个问题,而不是降低性能

1 个答案:

答案 0 :(得分:2)

这种方法可行:

List<DailyRoutine> d = new List<DailyRoutine>()
{
    new DailyRoutine() { Date = new DateTime(2017, 7, 1)},
    new DailyRoutine() { Date = new DateTime(2017, 7, 2)},
    new DailyRoutine() { Date = new DateTime(2017, 7, 3)},
    new DailyRoutine() { Date = new DateTime(2017, 7, 4)},
    new DailyRoutine() { Date = new DateTime(2017, 7, 5)}
};

DailyRoutine newDr = new DailyRoutine() { Date = new DateTime(2017, 7, 2) };
DailyRoutine oldDr = d.Where(dr => dr.Date == newDr.Date).FirstOrDefault();

if (oldDr != null)
{
    int idx = d.IndexOf(oldDr);
    List<DailyRoutine> changeList = d.Where((dr, i) => i >= idx).ToList();

    foreach (DailyRoutine i in changeList)
    {
        i.Date = i.Date.AddDays(1);
    }

    d.Insert((int)idx, newDr);
}
else
{
    d.Add(newDr);
}