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吗,因为它有点混乱。
答案 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块中添加错误处理程序。
如果可以给出解释的答案,那是我的。