如何处理排序“字符串”?

时间:2015-02-10 13:23:46

标签: c# sql sql-server sorting

假设我有一个带有项目的有序列表,每个项目都可以在此列表中上下排序。第一个想法是让SortOrder为int(ex 1-10)。这个问题是我总是必须在排序时更新至少2个项目(项目3代替项目4,从而切换排序值)。如果我在位置3放置一个新项目所有项目> 3必须在那里改变sortOrder。

所以为了避免这种情况,我可以使用更大的intervalls,例如:

N1 : 10 000
N2 : 20 000
N3 : 30 000
N4 : 40 000
N5 : 50 000

如果N4将被分类到一个级别,它将如下所示:

N1 : 10 000
N2 : 20 000
N4 : 25 000
N3 : 30 000
N5 : 50 000

我的问题是如何在C#中处理这个最好的方法?我应该使用什么数据类型?如何避免重新生成整个列表(当不再进行排序时)?

我自己的想法是在代码和数据库中将它存储为Decimal。

2 个答案:

答案 0 :(得分:0)

我使用的方法是使用int数据类型的专用DisplayOrder列;我(通常)对列进行索引,但不使用唯一索引。这样,通过更新值来交换两个项目并不会太痛苦。通常(默认情况下)我不需要通过UI显示值,因此实际值永远不会重要。如果拥有独特的价值非常重要,那么它也可以起作用 - 我有一个触发器,我跑到了“重新基地”。需要时,订单值从1开始。

答案 1 :(得分:0)

为什么在代码中需要“排序顺序”字段?

如果您在列表或其他容器中有内存中的项目,那么项目的顺序就是排序顺序。

只有在持久保存数据时才需要为数据库或其他方式分配数值。然后,当您检索要重新填充内存数据的项目时,获取它们并按排序顺序添加到列表中。

此方法允许对项目进行任何重新排序,也可以删除项目,而无需维护排序顺序值,直到您保存数据为止。