Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据插入范围中间_C#_Sql_Entity Framework - Fatal编程技术网

C# 将数据插入范围中间

C# 将数据插入范围中间,c#,sql,entity-framework,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日为例。说明有任何字符串 用户可以在中间添加一个新记录,以便将以下记录移动并更改为下一天。 预期输出

我有下面的型号

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日为例。说明有任何字符串

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

预期输出: 例如,用户可以在input和submit中提供日期和说明。如果输入日期为“2017年5月3日”(5月3日),则应在5月2日记录后添加条目,现有的5月3日记录更改为5月4日、5月4日至5月5日等。因此,输出日期类似于5月1日至5月6日,且给定输入在5月3日更新


请帮助我在不降低性能的情况下解决此问题

此方法将有效:

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);
}
List d=新列表()
{
new DailRoutine(){Date=new DateTime(2017,7,1)},
new DailRoutine(){Date=new DateTime(2017,7,2)},
new DailRoutine(){Date=new DateTime(2017,7,3)},
new DailRoutine(){Date=new DateTime(2017,7,4)},
new DailRoutine(){Date=new DateTime(2017,7,5)}
};
DailRoutine newDr=newDailRoutine(){Date=newDateTime(2017,7,2)};
DailRoutine oldDr=d.Where(dr=>dr.Date==newDr.Date).FirstOrDefault();
如果(oldDr!=null)
{
int idx=d.IndexOf(oldDr);
List changeList=d.Where((dr,i)=>i>=idx.ToList();
foreach(变更列表中的DailRoutine i)
{
i、 日期=i.Date.AddDays(1);
}
d、 插入((int)idx,newDr);
}
其他的
{
d、 添加(新DR);
}

此方法将起作用:

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);
}
List d=新列表()
{
new DailRoutine(){Date=new DateTime(2017,7,1)},
new DailRoutine(){Date=new DateTime(2017,7,2)},
new DailRoutine(){Date=new DateTime(2017,7,3)},
new DailRoutine(){Date=new DateTime(2017,7,4)},
new DailRoutine(){Date=new DateTime(2017,7,5)}
};
DailRoutine newDr=newDailRoutine(){Date=newDateTime(2017,7,2)};
DailRoutine oldDr=d.Where(dr=>dr.Date==newDr.Date).FirstOrDefault();
如果(oldDr!=null)
{
int idx=d.IndexOf(oldDr);
List changeList=d.Where((dr,i)=>i>=idx.ToList();
foreach(变更列表中的DailRoutine i)
{
i、 日期=i.Date.AddDays(1);
}
d、 插入((int)idx,newDr);
}
其他的
{
d、 添加(新DR);
}

您已经尝试过了吗?您尝试过什么方法?如何将这些模型存储在viewmodel中(假定为MVVM)?您的代码中可能应该有一个
列表
,或者类似的东西。是否每次需要时都从SQL数据库中读取这些条目?您应该提供更多的代码,并展示您已经想到了什么。在大多数情况下,这就像在
列表中插入([Index],new DailiyRoutine())
一样简单。读取这些条目时,您还需要在SQL查询中使用
orderby
关键字,以便从数据库中以正确的顺序获取它们。SQL不会在您插入行时对行进行排序。@r41n这在webapi中。是的,我得到你的订单,我也可以这样想。但无论如何,我需要将现有日期更新到下一个日期。所以根据你的想法,我的想法是,只需使用循环更新给定日期的条目,然后在最后添加新条目。所有这些都应该有订单字段,或者我们可以按日期使用订单。对吗?@Akhil,Romano Zumbe是对的,他的方法也是对的。如果您没有其他方法可以避免更改所有的
dailroutine
实例,那么他的答案就是您正在寻找的答案。您是否已经尝试过任何方法?您尝试过什么方法?如何将这些模型存储在viewmodel中(假定为MVVM)?您的代码中可能应该有一个
列表
,或者类似的东西。是否每次需要时都从SQL数据库中读取这些条目?您应该提供更多的代码,并展示您已经想到了什么。在大多数情况下,这就像在
列表中插入([Index],new DailiyRoutine())
一样简单。读取这些条目时,您还需要在SQL查询中使用
orderby
关键字,以便从数据库中以正确的顺序获取它们。SQL不会在您插入行时对行进行排序。@r41n这在webapi中。是的,我得到你的订单,我也可以这样想。但无论如何,我需要将现有日期更新到下一个日期。所以根据你的想法,我的想法是,只需使用循环更新给定日期的条目,然后在最后添加新条目。所有这些都应该有订单字段,或者我们可以按日期使用订单。对吗?@Akhil,Romano Zumbe是对的,他的方法也是对的。如果您没有其他方法可以避免更改所有
dailroutine
实例,那么他的答案就是您正在寻找的答案。很好。我要试试这个。但是使用这种插入方法会降低性能吗?请检查r41n的评论也。哪种方法更优化?这肯定不如插入新对象那么快。每个日期相等或更高的对象都需要触摸。但这是您的设计要求之一。除此之外,运行时间与对象计数成线性增加(这很好)。我想r41n没有考虑到,这些项目需要修改。很好。我要试试这个。但是使用这种插入方法会降低性能吗?请检查r41n的评论也。哪种方法更优化?这肯定不如插入新对象那么快。每个日期相等或更高的对象都需要触摸。但这是您的设计要求之一。除此之外,运行时间与对象计数成线性增加(这很好)。我认为r41n没有考虑到这些项目需要修改。