自动生成的ID与我制作的字符

时间:2018-08-20 08:12:19

标签: c# sql-server linq-to-sql

string SetTeacherId()
    {
        char digit = 'T';
        string id = "";
        var count = db.Teachers.Count();
        if (count > 0)
        {
            var str = db.Teachers.OrderByDescending(a => a.TeacherID).Select(a => a.TeacherID).First();
            string digits = new string(str.Where(char.IsDigit).ToArray());
            string letters = new string(str.Where(char.IsLetter).ToArray());
            int numbers;
            if (!int.TryParse(digits, out numbers))
            {

            }
            id += letters + (++numbers).ToString("D4");

            return id;
        }
        else
            return digit +"0001";
    }

在这里,我制作了一个称为SetTeacherId的方法。老实说,这是我上司做的。教师ID将自动递增。有人可以简化代码来自动生成id吗,因为它有点混乱。

2 个答案:

答案 0 :(得分:0)

首先,解释一下表中的ID数据类型会很好。

我们只能假设您使用NVARCHAR(x)来代表ID。

我不确定是否可以或是否要对表进行更改,但是可以将ID列设置为IDENTITY和数字数据类型,然后可以在其中定义种子(起始值)和增量步骤(下一个值将增加多少),​​然后由DataBAse Management System处理。 示例:DBA Stackexchange topic

但是由于您从事的是C#开发,所以我假设您宁愿使用编程方法。 函数的作用是,根据前一个ID和最后一个数字中使用的字母创建一个简单的哈希,将其加1并进行填充,使其包含4位数字(因此ToString函数中的D4

示例:Teacher0001 Teacher0002 Teacher0003 ... Teacher9999

为简化起见,您可以将ID设置为数字数据类型,读取最大的一种 然后仅增加1并插入其他值即可。通常,ID是数字的,并不是真正的描述性的,因为ID应该用于机器而不是人类来快速理解它们。

但是让数据库处理它更简单,更简洁,就像我在第三段中描述的那样。

答案 1 :(得分:0)

我认为代码已经很清楚了。

libs

此语句获得最大的教师ID。

var str = db.Teachers.OrderByDescending(a => a.TeacherID).Select(a => a.TeacherID).First();

此语句获取id的数字部分。

string digits = new string(str.Where(char.IsDigit).ToArray());

此语句将数字字符串解析为int。

int.TryParse(digits, out numbers)

此语句通过将字母向前加一个数字来创建新的id字符串。 我唯一能给出的建议是在if块中添加错误处理程序。

如果可以给出解释的答案,那是我的。