我有一个要求,说明如下:
"系统将验证导入文件中的用户名是否已被使用,并根据重复格式生成用户名 示例:如果用户名 suesmith 正在使用,系统将使用 suesmith1 作为用户名。如果 suesmith1 正在使用, 系统将使用 suesmith2 作为用户名"
基本上假设在我的用户表中,我已经有用户 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%' 并且在返回字符串 [] 的查询之后,我放置了 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 用户名是否已经存在,如果存在,则追加 1,然后检查 suesmith1 是否存在,追加 2 等等......如果你能告诉我如何开始!