-3

こんにちは、** でこのエラーが発生したのはなぜですか?

エラー : オブジェクト参照がオブジェクトのインスタンスに設定されていません。

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 は空ではありません。私の tbl に存在する str1 と str2 に値を設定します。

4

6 に答える 6

2

一致するアイテムが見つからない場合、メソッドdb.old.FirstOrDefault(p => p.oldfield == str1)は戻ります。nullすぐにプロパティにアクセスしようとしていidます。アイテムが見つからない場合に処理する必要があります。

于 2013-08-06T14:09:44.660 に答える
0

ありがとうございました。私の良き友よ、あなたは正しかった。私は Trim() を使用して作業しました。

     long Idold = db.old.FirstOrDefault(p => p.oldfield.Trim() == str1.Trim()).id;
于 2013-08-06T16:41:50.890 に答える
0

述語に一致するレコードがデータベースにないことは明らかです。FirstOrDefault()メソッドは null を返し、プロパティを取得しようとするとidNullReferenceException がスローされます。

于 2013-08-06T14:10:17.113 に答える
0

述語が に解決されると、のOrDefault部分FirstOrDefaultは null を返しますfalse

シーケンスにアイテムがないことが本当に例外的なケースである場合は、First代わりに を使用します。これは、アイテムがない場合に が例外をスローするFirstOrDefaultためです。First

ただし、シーケンスが時々空になることが予想される場合は、FirstOrDefaultロジックを使用してから をチェックすることをお勧めしますnull

于 2013-08-06T14:10:26.777 に答える
0

おそらくFirstOrDefault(p => p.oldFriend == str1)null が返されたためです。つまり、str1 入力と等しい oldFriend を持つレコードがなかったためです。

代わりにこれを試してください:

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;
}
于 2013-08-06T14:10:33.300 に答える
0

スタック トレースを提供しなかったので、クエリの 1 行目または 2 行目のどちらかだと思います。

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

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

str2 または str1 変数に等しい ID が見つからなかったため、FirstOrDefault は null を返しました。

于 2013-08-06T14:11:05.787 に答える