#c# #.net #linq #extension-methods
#c# #.net #linq #методы расширения
Вопрос:
Я написал некоторый LINQ, где я проверяю по базе данных, является ли имя пользователя уникальным, когда я добавляю нового пользователя. Мой код (см. Ниже) работает, но есть ли лучший способ сделать это? В настоящее время я полагаюсь на отслеживание ошибки, если имя пользователя не существует.
try
{
var User = (from u in _database.Users
where u.UserID == strUserName
select u).First();
if (User != null)
{
blnUnique = false;
}
}
catch
{
blnUnique = false;
}
Ответ №1:
Вы можете использовать перечислимые.Любой метод расширения <TSource>():
bool isUnique = (from u in database.Users
where u.UserID == userName
select u).Any();
Вот альтернативный способ выразить это с помощью лямбда-выражения:
bool isUnique = database.Users.Any(u => u.UserID == userName);
Обратите внимание, что оператор equals в классе String произведет сравнение порядковых номеров с учетом регистра. Если вы хотите провести сравнение без учета регистра, вам придется использовать строку.Метод Equals:
bool isUnique = database.Users.Any(
u => u.UserID.Equals(userName, StringComparison.OrdinalIgnoreCase));
Комментарии:
1. Спасибо … ‘Any’ выглядит так, как я искал, поскольку он возвращает true или false в отличие от FirstOrDefault
Ответ №2:
Используйте FirstOrDefault() вместо First()
Ответ №3:
Является ли _database репозиторием? Если это так, я бы предложил внедрить словарь внутренне, чтобы вы могли предоставить
FindUser(userID)
метод, который возвращает null, если идентификатор пользователя не найден. Ваш цикл не будет хорошо масштабироваться.