Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动生成的带有我创建的字符的id_C#_Sql Server_Linq To Sql - Fatal编程技术网

C# 自动生成的带有我创建的字符的id

C# 自动生成的带有我创建的字符的id,c#,sql-server,linq-to-sql,C#,Sql Server,Linq To Sql,在这里,我创建了一个名为settacherid的方法。老实说,这是我前辈做的。教师Id将自动递增。有没有人可以编写一个简单得多的代码来自动生成id,因为它有点混乱。首先,解释一下表中的id数据类型会很好 我们只能假设您正在使用NVARCHAR(x)来表示ID 我不确定您是否可以或希望对表进行更改,但您可以将ID列设置为标识和数字数据类型,在那里您可以定义种子(起始值)和增量步骤(下一个值将大多少),并让数据库管理系统处理它。 例如: 但既然你是从事C#开发的,我想你更愿意使用编程方法。 您的函数

在这里,我创建了一个名为settacherid的方法。老实说,这是我前辈做的。教师Id将自动递增。有没有人可以编写一个简单得多的代码来自动生成id,因为它有点混乱。

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

我们只能假设您正在使用
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");