首页 > 解决方案 > 如果数据库中有同名记录,如何附加后缀唯一?

问题描述

我遇到了一个小问题。

产品在数据库中列出。在代码列中,数据保存如下:

“F-01、F-02、F-03、……、X-99”

客户可能希望将外部数据添加到系统中,但有时他们希望添加相同的记录。

为了避免这些重复,我需要在代码列的末尾添加一个独特的后缀,例如“-01”。

我正在用c#开发这个系统,我开发了这样一个逻辑:

int counter = 1;
var code = "F-" + productEntity.Code;
​
while (await uow.Repository<Product>().Query().AnyAsync(a => a.Code == code) == true)
{
   code = code + "-" + counter;
   counter++;
}

但我注意到,我以 F-01-1 的形式添加的记录在返回给我时会变成F-01-1-1 。

我想我错过了一个很小的点,但我无法达到我的目标。

标签: c#algorithmdata-structures.net-core

解决方案


该表达式code + "-" + counter;将 3 个字符串附加在一起并返回结果。

说:

  • code"F-01"

  • counter1

然后上面的表达式将被评估为:

  • "F-01" + "-" + "1", 那是"F-01-1"

如果你重新执行你的方法,那么表达式将是:

  • "F-01-1" + "-" + "1"那是"F-01-1-1"

等等。

解决方法是拆分代码提取最后一部分,对应计数器的值。它是通过以下方式完成的string[] parts = "F-01-1".Split('-')

  • parts[0] = "F"

  • parts[1] = "01"

  • parts[2] = "1"对应于计数器

所以现在int counter = int.Parse(parts[2]) + 1将返回 counter 的下一个值2

你可以让你的完整代码"F-01-2"返回code = $"{parts[0]}-{parts[1]}-{counter}"


推荐阅读