【问题标题】:technique to iterate through the FirstName, LastName to create username迭代 FirstName、LastName 以创建用户名的技术
【发布时间】:2014-09-26 10:48:19
【问题描述】:

我被困在我试图为给定用户名生成密码的情况下。

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

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

【问题讨论】:

  • 如果一个用户的名字和姓氏与另一个用户相同,你的规则是什么?如果发生这种情况,您的应用程序将会中断。
  • 您可能需要重新考虑这一点。您将无法每次都根据名字和姓氏动态生成用户名,因为您永远无法知道您可能有多少个匹配的名字。也许第一次生成一个用户名,然后相应地存储它。
  • 为什么不检查它们是否是相同的用户名,然后在其上附加一个递增的数字呢?所以,第一个是“Testr”,第二个是“Testr1”,等等。
  • @JordanKaye - 您可以遍历名字的每个字符,直到有可用的开放用户名,但是,一旦您用完字符,OP 需要提供有关要求的更多信息。
  • @Ron - 是的,那会很好。我只是想确保您知道在确定这些要求之前,此代码可能会在某些时候导致问题。在名称后添加一个数字将非常容易实现。祝你好运!

标签: c# asp.net linq


【解决方案1】:

如果应用程序想要避免错误,则需要 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.
        }
    }
}

【讨论】:

  • 太棒了!!感谢 Ek0nomik !我绞尽脑汁想找到这样的解决方案。刚刚学习 Linq、Asp.net...感谢您的帮助。
  • 感谢您提供如此好的解决方案。但是有个小问题,应该是 var existingUsers = entity.Users.Where(u => u.Username.StartsWith(possibleUsername)).ToList();在 .ToList() 之前还需要一个 )
  • @piavgh - 不错,已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
相关资源
最近更新 更多