技术循环访问名字,姓氏以创建用户名



我陷入了尝试为给定用户名生成密码的情况。

我正在通过名字和姓氏文本框从用户输入的用户名中创建一个用户名,通过用户的姓氏 + 名字的第一个字母。例如,如果用户的名字是"Ronald",姓氏是"Test",我会在数据库中将用户名添加为"Testr"。但是,如果我对另一个用户有相同的姓氏,并且名字以与数据库中现有用户相同的名称开头,我会像这样添加名字的前 2 个字母 -

if (entities.Users.Any(a => a.LastName == tbLname.Text && a.FirstName.StartsWith(fname))) 
 username = (tbLname.Text + tbFname.Text.Substring(0,2)).ToLower();

现在的问题是,这仅在前 2 个字母与名字匹配时才有效。如果我有 3 个甚至 4 个与名字匹配怎么办? 我不知道如何检查其余字符是否具有唯一的用户名。

关于如何实现这一目标的任何想法?提前谢谢。

如果应用程序想要避免错误,则需要从 OP 获得更多信息,但与此同时,这应该可以解决手头的问题。

//Store the first possible name.
var possibleUsername = string.Format("{0}{1}", tbLname.Text, tbFname.Text.Substring(0,1))
//Don't hit the database N times, instead get all the possible names in one shot.
var existingUsers = entities.Users.Where(u => u.Username.StartsWith(possibleUsername)).ToList();
//Find the first possible open username.
if (existingUsers.Count == 0) {
    //Create the user since the username is open.
} else {
    //Iterate through all the possible usernames and create it when a spot is open.
    for(var i = 1; i < existingUsers.Count; i++) {
        if (existingUsers.FirstOrDefault(u => u.Username == string.Format("{0}{1}", tbLname.Text, tbFname.Text.Substring(0, i))) == null) {
            //Create the user since the user name is open.
        }
    }
}

最新更新