C# 自动生成的带有我创建的字符的id
在这里,我创建了一个名为settacherid的方法。老实说,这是我前辈做的。教师Id将自动递增。有没有人可以编写一个简单得多的代码来自动生成id,因为它有点混乱。首先,解释一下表中的id数据类型会很好 我们只能假设您正在使用C# 自动生成的带有我创建的字符的id,c#,sql-server,linq-to-sql,C#,Sql Server,Linq To Sql,在这里,我创建了一个名为settacherid的方法。老实说,这是我前辈做的。教师Id将自动递增。有没有人可以编写一个简单得多的代码来自动生成id,因为它有点混乱。首先,解释一下表中的id数据类型会很好 我们只能假设您正在使用NVARCHAR(x)来表示ID 我不确定您是否可以或希望对表进行更改,但您可以将ID列设置为标识和数字数据类型,在那里您可以定义种子(起始值)和增量步骤(下一个值将大多少),并让数据库管理系统处理它。 例如: 但既然你是从事C#开发的,我想你更愿意使用编程方法。 您的函数
NVARCHAR(x)
来表示ID
我不确定您是否可以或希望对表进行更改,但您可以将ID列设置为标识和数字数据类型,在那里您可以定义种子(起始值)和增量步骤(下一个值将大多少),并让数据库管理系统处理它。
例如:
但既然你是从事C#开发的,我想你更愿意使用编程方法。
您的函数所做的是,从上一个ID中使用的字母和最后一个数字创建一个简单的散列,递增1并填充,使其包含4位数字(因此ToString函数中的D4
)
示例:Teacher0001
教师0002
教师0003
...
教师9999
为了使它更简单,您可以将ID转换为数字数据类型,读取最大的数据类型
只需增加1,然后插入其他值。通常ID是数字的,并不是真正的描述性的,因为它们应该被机器用来快速理解它们,而不是人类
但是让DB来处理它会更简单、更干净,就像我在第3段中描述的那样。我认为代码已经很清楚了
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";
}
此语句获取最大的教师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块中添加错误处理程序
如果解释可以是答案,这是我的。解释也可以是答案吗?这个方法对我来说很好,因为在你的Id
中有字母和数字。然而,if
语句毫无意义。这在多个层面上都是可怕的。首先,这属于某个地方,在下一次调用之前,您可以确保它在同一时间只运行一次,并且id被插入(或丢弃)。在您尝试理解此代码之前,请您的高级主管的高级主管查看设计。我已经测试了它,它可以工作。但是你能解释一下它是如何工作的吗。对于我所理解的是“D4”是一些类似于“D”的数字和“4”的数量(0000)Thx的建议。但要求教师id的格式是t+XXTHX@ivooQ,但我想问一下。在字符串数字中,我们应该添加新字符串吗?有什么用?@JonathanBenedict May让您困惑的是D4
,有一个文档介绍了此功能,请参阅:。
id += letters + (++numbers).ToString("D4");