如果该特定帐户名称已存在,如何生成顺序字符串名称,如 "account1"、"account2"

How to generate sequential string names like "account1", "account2" if that particular account name already exists

我的要求如下:

"系统会验证导入文件中的用户名是否已被使用,并根据重复格式生成用户名示例:如果用户名suesmith正在使用,系统将使用suesmith1 作为用户名。如果正在使用 suesmith1,系统将使用 suesmith2 作为用户名"

基本上可以说,在我的用户 table 中,我已经有用户 suesmith,并且我有从 csv 文件导入新用户的功能。如果在该文件中存在 suesmith,它的行为应该与该要求相同。

我从以下开始:

var usernameFromFile = userInfoFromFile.Username;
var existingUsernames = this.accountCreationService.GetSimilarUsernamesBasedOnProvidedUsernameFromGlobal(userInfoFromFile.Username, serverInfoForGlobalDatabase, globalDatabaseName).Where(x => x.StartsWith(usernameFromFile)).ToArray(); 

// userInfoFromFile 是一个从文件中填充数据的对象,这个对象用于创建一个新的用户帐户,所以在这个对象中我需要保存用户名

// 函数 GetSimilarUsernamesBasedOnProvidedUsernameFromGlobal 运行一个 sql 查询: SELECT us.Username FROM Users us where us.Username LIKE '%usernameFromFile%' 在查询 returns a string[] 之后,我放置了一个 Where 条件以仅检索那些以文件中的用户名开头的用户名(因此不包括像 12suesmith 或 abcsuesmith 这样的用户名)

然后我继续这样:

                    var usernamesInCriteria = new Dictionary<string, int?>();
                    ///var usernamesInCriteria = new List<string>();

                    for (int i = 0; i < existingUsernames.Length; i++)
                    {
                        var stringAfterUsername = existingUsernames[i].Substring(usernameFromFile.Length);
                       
                        int numberInUsername;
                        var isNumber = int.TryParse(stringAfterUsername, out numberInUsername);

                        if (stringAfterUsername.IsNullOrEmpty() || isNumber)
                        {
                            usernamesInCriteria.Add(existingUsernames[i], numberInUsername);
                            ///usernamesInCriteria.Add(existingUsernames[i]); //in this list the same username (if exists) and usernames followed by numbers only will be stored     
                        }                                
                    }

                    foreach (var pair in usernamesInCriteria)
                    {
                        if (pair.Key == userInfoFromFile.Username)
                        {

                        }
                    }

基本上,对于现有用户名数组中的每个用户名,我检查了 usernameFromFile 之后是否有数字子字符串,如果有,则将这些现有用户名添加到字典中(并通过 stringAfterUsername.IsNullOrEmpty() 还包括现有的用户名,如 suesmith)

但我不确定该怎么做,因为我已经获得了所有以数字结尾的相似用户名。所以我不知道如何验证 suesmith 用户名是否已经存在,如果它存在,附加 1,然后检查 suesmith1 是否存在,附加 2 等等......如果你能告诉我如何开始!

怎么样:

if (existingUsernames.Contains(username))
{
    username = Enumerable.Range(1, Int32.MaxValue)
        .Select(i => $"{username}{i}")
        .Where(s => !existingUsernames.Contains(s))
        .First();
}

在您现有的用户名查询中,您应该删除 LIKE '%usernameFromFile%' 中的第一个 %。