Вы пытаетесь сгенерировать уникальное имя пользователя для записи 'user', учитывая его настоящее имя?Или адрес электронной почты?Это так, чтобы их можно было отслеживать / хранить в SQL Server (ваш вопрос не очень понятен)?Обычной вещью было бы не создавать для них имя пользователя (это одно из преимуществ, которое вы можете использовать, чтобы побудить пользователя зарегистрироваться, у него есть собственное имя пользователя).
Вместо этого вы можете использовать сам адрес электронной почтыв качестве первичного ключа, который в любом случае всегда будет уникальным: поле имени пользователя будет иметь значение NULL (разрешить NULL) и содержать данные только в том случае, если пользователь зарегистрировался и выбрал имя.
Если вы хотите отобразитьимя пользователя или его адрес электронной почты, если у них нет имени пользователя, вы можете использовать COALESCE или ISNULL, например SELECT ISNULL(username, email_address)
- который дает значение «username», если оно не равно нулю, и в этом случае он дает значение'email_address'.
Надеюсь, что это поможет - возможно, не тот вопрос, который вы задавали, но если бы вы могли перефразировать или уточнить, мы будем рады помочь вам в дальнейшем.
В качестве альтернативы я читаюВаш вопрос еще раз: вы пытаетесь предложить доступные имена пользователей?Например, если они введут:
Имя: Kieren
Фамилия: Johnstone
Затем вы хотите предложить KierenJohnstone, KierenJohnstone1, JohnstoneK, KJohnstone и т. Д.?(если они доступны, то есть).
Если это так, вы должны написать метод, который генерирует возможности, например:
public IEnumerable<string> GeneratePossibleBaseUsernames(string firstname, string lastname)
{
yield return firstname + lastname; // eg KierenJohnstone
yield return lastname + firstname; // eg JohnstoneKieren
yield return firstname.Substring(0,1) + lastname; // eg KJohnstone
yield return lastname + firstname.Substring(0,1); // eg JohnstoneK
yield return firstname + lastname.Substring(0,1); // eg KierenJ
}
Затем вы увидите, если этидоступны в базе данных:
public List<string> GetAvailablePossibleUsernames(string firstname, string lastname)
{
List<string> availablePossibilities = new List<string>();
foreach (string possible in GeneratePossibleBaseUsernames(firstname, lastname))
{
if (IsAvailable(possible))
{
availablePossibilities.Add(possible);
continue;
}
for (int i = 1; i < 100; i++)
{
string postfixedTest = possible + i.ToString();
if (IsAvailable(postfixedTest))
{
availablePossibilities.Add(postfixedTest);
break;
}
}
}
return availablePossibilities;
}
Вам необходимо написать метод IsAvailable (), чтобы взять строку в качестве параметра и вернуть bool - 'true', если имя пользователя еще не существует вбазы данных.
Этот метод возвращает список строковых объектов с предложениями: он будет проверять результаты из GeneratePossibleBaseUsernames, а если один из них недоступен, он будет пробовать его с номерами от 1 до 99 посленапример, если был взят KierenJohnstone, он бы предложил KierenJohnstone1.
Вы также можете реализовать все это в хранимой процедуре SQL.Вы определенно захотите проверить, доступно ли имя, когда вы вставляете / обновляете запись, или поместите уникальный индекс в таблицу имен пользователей, чтобы остановить дублирование - в случае, если два человека используют одно и то же имя в одно и то же время!
Надеюсь, это поможет.