Лучший способ получить результаты одной записи в LINQ to SQL - PullRequest
43 голосов
/ 15 октября 2008

Если я запрашиваю таблицу с условием в ключевом поле, как в:

        var user = from u in dc.Users
                   where u.UserName == usn
                   select u;

Я знаю, что получу либо ноль результатов, либо один результат. Должен ли я продолжать получать результаты, используя для каждого или есть другой предпочтительный способ справиться с такой ситуацией.

Ответы [ 6 ]

77 голосов
/ 15 октября 2008

Попробуйте что-то вроде этого:

var user = (from u in dc.Users
                   where u.UserName == usn
                   select u).FirstOrDefault();

Метод FirstOrDefault возвращает первый элемент последовательности, который удовлетворяет указанному условию, или значение по умолчанию, если такой элемент не найден.

18 голосов
/ 15 октября 2008

Почему не что-то вроде

var user = dc.Users.SingleOrDefault(u=> u.UserName==usn);
5 голосов
/ 15 октября 2008

Также следует отметить, что First / FirstOrDefault / Single / SingleOrDefault являются точкой выполнения команды LINQ to Sql. Поскольку оператор LINQ до этого не выполнялся, он может влиять на сгенерированный SQL (например, он может добавить TOP 1 к команде sql)

4 голосов
/ 15 октября 2008

Я бы использовал First () или FirstOrDefault ().

Разница: в First () будет сгенерировано исключение, если строка не найдена.

1 голос
/ 15 октября 2008

Я бы использовал метод SingleOrDefault.

var user = (from u in dc.Users
                   where u.UserName == usn
                   select u).SingleOrDefault();
0 голосов
/ 24 июня 2015

Другим вариантом является использование Contains (имя пользователя) вместо "=="

var user = (from u in dc.UserInfo 
                      where u.Users.Contains(username) 
                      select u).SingleOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...