Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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# 带有实体框架的ASP.net MVC对数据库记录进行重新排序_C#_Asp.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 带有实体框架的ASP.net MVC对数据库记录进行重新排序

C# 带有实体框架的ASP.net MVC对数据库记录进行重新排序,c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,我一直在努力寻找可以帮助我解决问题的资源,这似乎是一个相当棘手的问题 假设我在DB中有一个表(100条记录),其中有一个整数序列字段(这是增量的)。现在我有了对列表重新排序的功能,用户可以在其中将一个项目从底部拖到中间(例如,序列100->50) 目前,我将记录顺序设置为50,之后的每一条记录都将以1+的顺序更新。(例如50变为51,51变为52)依此类推 对我来说,这是一种低效的方法,因为它必须更新50条记录才能更改顺序,并且可能需要一段时间,尤其是当表的大小增加时 有没有一种有效的方式来进行

我一直在努力寻找可以帮助我解决问题的资源,这似乎是一个相当棘手的问题

假设我在DB中有一个表(100条记录),其中有一个整数序列字段(这是增量的)。现在我有了对列表重新排序的功能,用户可以在其中将一个项目从底部拖到中间(例如,序列100->50)

目前,我将记录顺序设置为50,之后的每一条记录都将以1+的顺序更新。(例如50变为51,51变为52)依此类推

对我来说,这是一种低效的方法,因为它必须更新50条记录才能更改顺序,并且可能需要一段时间,尤其是当表的大小增加时


有没有一种有效的方式来进行重新排序,而不需要更新每条记录?

我不明白为什么您会发现更新50条记录是一个问题,而用户正是这样做的。此外,如果表确实增长了,如果计算机无法处理,用户如何可能在UI中重新排序那么多项


如果实体本身很重,您只需要更改数字,那么您就可以编写一个存储过程或通过EF执行此特定操作的原始SQL。

为表提供一个名为“order”的新列,该列为十进制类型,默认值为1到100


将100拖动到50时,将此“顺序”值设置为(49+50)/2,以便原始100将介于49和50之间。并使用“顺序”进行排序。

您可以根据链表结构对元素进行排序

添加记录id,并使用下一个记录id代替订单id

但从另一方面来看,这也带来了类似的问题。您必须查看每个记录以确定元素的顺序


最佳做法是只更新所有其他记录。

我认为拖放式重新排序用户界面在需要更新的行太多的情况下也不会有用,所以我认为这不应该是一个大问题。