Лучший способ для получения результатов одной записи в LINQ to SQL
Если я запрашиваю таблицу с условием в поле ключа, как в:
var user = from u in dc.Users
where u.UserName == usn
select u;
Я знаю, что я получу нулевые результаты или один результат. Должен ли я продолжать и получать результаты, используя для каждого или есть еще один предпочтительный способ справиться с такой ситуацией.
Ответы
Ответ 1
Попробуйте что-то вроде этого:
var user = (from u in dc.Users
where u.UserName == usn
select u).FirstOrDefault();
Метод FirstOrDefault возвращает первый элемент последовательности, который удовлетворяет заданному условию или по умолчанию, если такой элемент не найден.
Ответ 2
Почему не что-то вроде
var user = dc.Users.SingleOrDefault(u=> u.UserName==usn);
Ответ 3
Также следует отметить, что First/FirstOrDefault/Single/SingleOrDefault являются точкой выполнения для команды LINQ to Sql. Поскольку оператор LINQ еще не был выполнен до этого, он может повлиять на генерируемый SQL (например, он может добавить команду TOP 1 в команду sql)
Ответ 4
Я бы использовал First() или FirstOrDefault().
Разница: при первом() будет создано исключение, если ни одна строка не может быть найдена.
Ответ 5
Я бы использовал метод SingleOrDefault.
var user = (from u in dc.Users
where u.UserName == usn
select u).SingleOrDefault();
Ответ 6
Другой вариант - использовать Contains (имя пользователя) в отличие от "=="
var user = (from u in dc.UserInfo
where u.Users.Contains(username)
select u).SingleOrDefault();