Отсутствие результата в запросе LINQ дает ссылку на объект, не установленную на экземпляр объекта в операторе IF ELSE - PullRequest
3 голосов
/ 12 февраля 2010

У меня есть следующий код:

        DataClasses1DataContext db = new DataClasses1DataContext();

        var UserInfo = db.Users.FirstOrDefault(u => u.Email == TextBox1.Text);

        if (UserInfo.Email != null)
        {
            Label2.Text = "Email is not null";
        }
        else
        {
            Label2.Text = "Email is null";
        }

Если адрес электронной почты существует в таблице, он успешно печатает «Электронная почта не является нулевой». Однако, если нет соответствующей записи, я получаю ссылку на объект, не установленную для экземпляра ошибки объекта для строки 29:

Line 27:             DataClasses1DataContext db = new DataClasses1DataContext();
Line 28: 
Line 29:             var UserInfo = db.Users.FirstOrDefault(u => u.Email == TextBox1.Text);
Line 30: 
Line 31:             if (UserInfo.Email != null)

Я в тупике! Любая помощь будет принята с благодарностью.

Ответы [ 6 ]

4 голосов
/ 12 февраля 2010

Возможно, вы захотите проверить нулевое значение в предикате, но если это реальная база данных, в этом нет необходимости:

var UserInfo = db.Users.FirstOrDefault(u => u != null &&
                                            u.Email == TextBox1.Text);

Но что еще более важно, в вашем коде в строке 31 есть очевидная ошибка. Если FirstOrDefault не находит соответствующий объект, он не возвращает объект со всеми полями, установленными в ноль. Он возвращает нулевую ссылку - то есть никакой объект вообще. Вам нужно проверить это:

if (UserInfo != null)
{
    Label2.Text = "User found";
}
else
{
    Label2.Text = "User not found";
}

По моему мнению, вы должны сначала исправить очевидную ошибку, а затем обновить ваш вопрос правильным кодом, если у вас все еще есть проблемы.

1 голос
/ 26 февраля 2010
var UserInfo = db.Users.FirstOrDefault(u => u.Email == TextBox1.Text);

Вы можете получить исключение null ref в этой строке, только если db или TextBox1 или TextBox1.Text равно нулю. Все сомнительны. Я думаю, что вы ошиблись.

0 голосов
/ 28 марта 2014

Вы также должны проверить NULL на "UserInfo" ....

попробуйте это

if (UserInfo! = Null && UserInfo.Email! = Null)

        {
            Label2.Text = "Email is not null";
        }
        else
        {
            Label2.Text = "Email is null";
        }
0 голосов
/ 19 декабря 2011
Check you code
var UserInfo = db.Users.FirstOrDefault(u => u.Email == TextBox1.Text);

if (UserInfo.Email != null) // it is wrong

Прежде всего вы должны проверить, имеет ли UserInfo значение null, а затем попытаться проверить его члены, например:

if(UserInfo != null)
{
// your code
}

Это решит вашу проблему.

0 голосов
/ 12 февраля 2010

Кроме того, вы можете использовать

db.Users.Any(u=> u.Email!=null && u.Email == TextBox1.Text);
0 голосов
/ 12 февраля 2010

Попробуйте это:

var UserInfo = db.Users.FirstOrDefault(u => !string.IsNullOrEmpty(u.Email) && u.Email == TextBox1.Text);
...