Linq to sql LINQ查询中没有结果为IF ELSE语句中的对象实例提供未设置的对象引用

Linq to sql LINQ查询中没有结果为IF ELSE语句中的对象实例提供未设置的对象引用,linq-to-sql,null,if-statement,Linq To Sql,Null,If Statement,我有以下代码: DataClasses1DataContext db = new DataClasses1DataContext(); var UserInfo = db.Users.FirstOrDefault(u => u.Email == TextBox1.Text); if (UserInfo.Email != null) { Label2.Text = "Email is not null

我有以下代码:

        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) 第27行:DataClasses1DataContext db=新DataClasses1DataContext(); 第28行: 第29行:var UserInfo=db.Users.FirstOrDefault(u=>u.Email==TextBox1.Text); 第30行: 第31行:如果(UserInfo.Email!=null) 我被难住了!任何帮助都将不胜感激。

试试以下方法:

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

您可能希望检查谓词中的null,但如果它是真实数据库,则不需要:

var UserInfo = db.Users.FirstOrDefault(u => u != null &&
                                            u.Email == TextBox1.Text);
但更重要的是,第31行的代码中有一个明显的错误。如果
FirstOrDefault
未找到匹配的对象,则不会返回所有字段均设置为null的对象。它返回一个空引用,即根本没有对象。您需要对此进行测试:

if (UserInfo != null)
{
    Label2.Text = "User found";
}
else
{
    Label2.Text = "User not found";
}
在我看来,您应该首先修复明显的错误,然后用正确的代码更新您的问题,如果您仍然有问题。

此外,您可以使用

db.Users.Any(u=> u.Email!=null && u.Email == TextBox1.Text);
只有当
db
TextBox1
TextBox1.Text
为空时,您才能在此行中获得null ref异常。一切都值得怀疑。我想你打错电话了

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
}

它将解决您的问题。

您还应该对“UserInfo”进行空检查

试试这个

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


如果
db.Users
u
为空,则异常应出现在第31行?另外
Textbox1.Text
为null不应给出异常。相等性测试应该只返回false。u从不获取值(null或其他值):它只是一个lambda表达式参数,用于生成表达式树以生成一些sql。Users不太可能为null,但我认为这是可能的。关于Textbox1.text,您是对的。我相信
u
可以在LINQ to对象中获取
null
。这个问题提到了一个“表”,建议使用LINQ到SQL,但值得一提的是,这种区别可能很棘手。这个问题也被标记了。将LinqToObject的信息放在这里会让人困惑。
if(UserInfo != null)
{
// your code
}
        {
            Label2.Text = "Email is not null";
        }
        else
        {
            Label2.Text = "Email is null";
        }