正如标题所说:)
在我的数据库中,我正在使用的表格有一个 OrderID 字段,该字段确定输出时将显示行的顺序(奇怪的是!)。
在C#代码中,这个数据表作为通用列表(List)加载,集合中的每个项目都是数据库表中行的副本。
因此,我应该在列表中的每个项目中都有 OrderID 字段,并将其用于订购。或者我应该只使用数据库中的OrderID来确定列表中对象的顺序。
要创建OrderID属性,这是问题
澄清: 填充列表时,用户将添加和删除项目以及更改现有项目的顺序。然后,这些数据将被保存回数据库。
答案 0 :(得分:7)
他们总是会以同样的方式订购吗?例如,用户是否可以按字母顺序重新排序,然后要求您返回原始订单?如果是这样,保留OrderID是有意义的。
同样,如果您需要能够添加新项目,则需要能够正确定位。
就我个人而言,即使您现在不需要它,可能取得OrderID
,只是因为它几乎不需要额外的努力并且以后会提供更大的灵活性 - 假设你不是非常记忆关键。当你拿到时,我仍然会让数据库进行排序,而不是取出然后对集合进行排序。
答案 1 :(得分:4)
是的,在项目本身上加上OrderID
字段。它更安全,更灵活。
例如,您可以添加和删除项目,在客户端重新排序列表等,而不必担心丢失每个项目的正确OrderID
。您还可以使用列表上下文之外的项目,而无需单独跟踪其OrderID
。
答案 2 :(得分:3)
我希望我的对象应该是完整的,无论它们是否在列表中 - 考虑从列表中拉出一个项目并在其他地方使用它,它的ID可能很重要。所以是的,ID的属性。
答案 3 :(得分:1)
如果仅需要订购,您也可以将其排除在外。但总的来说,我们需要它用于更新等。而且成本不是很大。
答案 4 :(得分:0)
我建议您在数据库中创建另一列来安排项目,而不是使用OrderID - 我在这里假设,可以用作数据库的行标识符/主键。
我会给你一个场景。
假设您有以下项目:
您已添加了另一项:
如果用户删除了订单ID 2 - Banana,并希望订单ID 4- Grapes替换列表中的已删除项目,那么您将如何对其进行排序?至少如果您添加其他列,则可以保留商品的排序顺序,而无需触及订单ID。
另一方面,如果订单ID不是您的表的主键,并且您有不同的主键,那么请务必使用订单ID作为您的排序列。确保为排序列实现唯一索引,以便它可以增强数据库和应用程序性能。
为了使您在.NET中的排序更容易,您可以使用System.Collections.Specialized Namespace中的类对列表进行排序,并希望它用于强类型集合,即Dictionary,OrderedDictionary等,因为您将使用如果要实现排序顺序列,则为键/值对。
希望这有帮助!