如果该特定帐户名称已存在,如何生成顺序字符串名称,如 "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%'
中的第一个 %。
我的要求如下:
"系统会验证导入文件中的用户名是否已被使用,并根据重复格式生成用户名示例:如果用户名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%'
中的第一个 %。