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";
}