1

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

我通过用户的姓氏+名字的第一个字母,通过名字和姓氏的文本框从用户的输入中创建用户名。例如,如果用户的名字是“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 个匹配名字怎么办?我不知道如何检查剩余的字符是否具有唯一的用户名。

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

4

1 回答 1

5

如果应用程序想要避免错误,则 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.
        }
    }
}
于 2012-10-01T16:15:07.553 回答