为什么Object引用没有设置为对象的实例。

时间:2013-08-06 14:07:49

标签: asp.net-mvc asp.net-mvc-4

为什么这个错误发生在**?

错误:对象引用未设置为对象的实例。

public static long GetID(string str1, string str2)
{
    using(MyContext db = new MyContext())
    {
        long Idold = db.old.FirstOrDefault(p => p.oldfield == str1).id; //**
        return db.tbl_new.FirstOrDefault(p => p.id_old == Idold && p.newfield == str2).id;           
    }
}

当然我的tbl不是空的.i将值设置为我的tbl中存在的str1和str2。

6 个答案:

答案 0 :(得分:2)

如果db.old.FirstOrDefault(p => p.oldfield == str1)找不到匹配项,则null将返回id。您正在尝试访问{{1}}属性。当没有找到任何物品时你需要处理。

答案 1 :(得分:0)

很明显,数据库中没有与谓词匹配的记录。 FirstOrDefault()方法返回null,当您尝试获取id属性时,它会抛出NullReferenceException。

答案 2 :(得分:0)

当谓词解析为OrDefault时,FirstOrDefault的{​​{1}}部分返回null。

如果您的序列中没有项目确实是特殊情况,请使用false代替First,因为如果没有项目,FirstOrDefault会抛出异常

但是,如果您希望序列在某些时候是空的,那么最好使用First逻辑,然后检查FirstOrDefault

答案 3 :(得分:0)

可能是因为FirstOrDefault(p => p.oldFriend == str1)返回null。换句话说,因为没有记录,oldFriend等于str1输入。

请改为尝试:

var oldFriend = db.old.FirstOrDefault(p => p.oldfield == str1);
if(oldFriend != null)
{
    long Idold = oldFriend.id;
    return db.tbl_new.FirstOrDefault(p => p.id_old == Idold && p.newfield == str2).id;
}
else
{
    return 0;
}

答案 4 :(得分:0)

由于你没有提供堆栈跟踪,我猜你的查询中的第一行或第二行。

db.old.FirstOrDefault(p => p.oldfield == str1).Id

db.tbl_new.FirstOrDefault(p => p.id_old == Idold && p.newfield == str2).id

FirstOrDefault返回null,因为它找不到等于str2或str1变量的Id

答案 5 :(得分:0)

谢谢你们所有人。 我的好朋友,你是对的。我使用了Trim()并且工作了。

     long Idold = db.old.FirstOrDefault(p => p.oldfield.Trim() == str1.Trim()).id;