LINQ to SQL Присоединяющийся запрос, возвращающий 1 вместо 0 - PullRequest
0 голосов
/ 28 декабря 2011

В чем разница между этими двумя запросами?

Я получаю 0 от code1.Count (), но 1 от codes2.Count (), но оно должно быть 0 для обоих.

 IQueryable<SecurityCode> codes1 = (from user in dataBase.SecurityUsers
                         from code in user.SecurityCodes
                         where user.UsrUserName.Equals(code.UsrUserName)
                               && user.UsrPhone.Equals(phone)
                         select code);


 IQueryable<SecurityCode> codes2 = (from user in dataBase.SecurityUsers
                               where user.UsrPhone.Equals(phone)
                         select user.SecurityCodes.FirstOrDefault());

Отношение отображается ниже

Любое объяснение будет высоко оценено.

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

FirstOrDefault всегда будет возвращать ровно 1 элемент, независимо от того, существует ли он. поэтому ваш второй запрос всегда будет возвращать элементы. (по одному на каждого пользователя)

0 голосов
/ 28 декабря 2011

FirstOrDefault () для любой коллекции означает, что вы всегда получите один результат. Этот результат будет либо первым найденным результатом, либо значением по умолчанию, если результат не был найден.

Если вы измените второй запрос, чтобы исключить FirstOrDefault (), счетчик в обоих запросах должен дать одинаковый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...