簡體   English   中英

如果該特定帳戶名稱已存在,如何生成諸如“account1”、“account2”之類的連續字符串名稱

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

我有一個要求,說明如下:

"系統將驗證導入文件中的用戶名是否已在使用,並根據重復格式生成用戶名示例:如果用戶名 suesmith 正在使用,系統將使用 suesmith1 作為用戶名。如果 suesmith1 正在使用, 系統將使用 suesmith2 作為用戶名"

基本上假設在我的用戶表中,我已經有用戶 suesmith,並且我有一個 function 可以從 csv 文件導入新用戶。 如果在該文件中存在 suesmith,它的行為應該與該要求中的一樣。

我從以下開始:

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

// userInfoFromFile 是一個 object,它填充了來自文件的數據,這個 object 用於創建一個新的用戶帳戶,所以在這個 object 中我需要保存用戶名

// The function GetSimilarUsernamesBasedOnProvidedUsernameFromGlobal runs a sql query: SELECT us.Username FROM Users us where us.Username LIKE '%usernameFromFile%' and after the query that returns a string[], I've placed a Where condition to retrieve only those usernames以文件中的用戶名開頭(因此不包括 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 之后是否有一個數字 substring,如果是,則將這些現有用戶名添加到字典中(並且通過stringAfterUsername.IsNullOrEmpty()還包括現有用戶名,例如蘇史密斯)

但進一步我不確定該怎么做,因為我已經獲得了所有以數字結尾的相似用戶名。 所以我不知道如何驗證 suesmith 用戶名已經存在,如果存在,append 1 到它,然后檢查 suesmith1 是否存在,append 2 等等......如果你能告訴我如何開始!

怎么樣:

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

在您現有的用戶名查詢中,您應該從LIKE '%usernameFromFile%'中刪除第一個 % 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM