1

特定のユーザー名のパスワードを生成しようとしている状況で立ち往生しています。

ユーザーの姓と名の最初の文字によって、ユーザーの入力から 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 つある場合はどうなりますか? 残りの文字が一意のユーザー名を持つことを確認する方法がわかりません。

これを達成する方法について何か考えはありますか? 前もって感謝します。

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 に答える