4

次のようなラムダでデータベースからデータを取得します

 var obj = DBContext.MyTable.Where(x => x.ID == 2).SingleOrDefault().MyColumn;

実は にMyTable2 の ID はありません。
だから私はこのメッセージを受け取りました。

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

どうすれば適切に検証できますか?

4

5 に答える 5

13

クエリの結果を別の変数にキャプチャし、プロパティにアクセスする前にアイテムが見つかったかどうかを確認します。

var yourItem = DBContext.MyTable.Where(x => x.ID == 2).SingleOrDefault();
if (yourItem != null)
    obj = yourItem.MyColumn;

SingleOrDefaultところで、述語をメソッドに渡すことができます:

var yourItem = DBContext.MyTable.SingleOrDefault(x => x.ID == 2);

また、お申し込み前に物件をお選びいただけますSingleOrDefault

var obj = DBContext.MyTable.Where(x => x.ID == 2)
                           .Select(x => x.MyColumn)
                           .SingleOrDefault();
于 2013-06-04T12:45:04.117 に答える
3

これを行う別の方法は、最初の引数が null の場合に 2 番目の引数を使用する"null-coalescing" ??operatorを使用することです。

var obj = (DBContext.MyTable.FirstOrDefault(x => x.ID == 2) ?? new MyTable()).MyColumn;

于 2014-01-10T05:32:26.053 に答える
2

戻り値が null かどうかを最初に確認してからアクセスする必要があります。

var temp = DBContext.MyTable.Where(x => x.ID == 2).SingleOrDefault();

if (temp != null)
{
    var obj = temp.MyColumn;
}

最もエレガントな方法ではありませんが、他に知りません。

于 2013-06-04T12:46:13.540 に答える
1

.FirstOrDefault() の代わりに DefaultIfEmpty() を好む

そうすることで if チェックを避けることができます

例えば

var obj = DBContext.MyTable.Where(x => x.ID == 2).DefaultIfEmpty().MyColumn;

また

var obj = DBContext.MyTable.Where(x => x.ID == 2).DefaultIfEmpty(string.Empty).MyColumn;

DefaultIfEmpty の概念は単純です。空のコレクションを 1 つの既定値のコレクションに置き換えます。

int のデフォルト値は 0 です。したがって、List の DefaultIfEmpty は、ゼロ要素が 1 つある List を生成します。

それが役に立てば幸い。

于 2013-06-04T13:15:30.520 に答える
0
var yourItem = DBContext.MyTable.Where(x => x.ID == 2).ToArray()
if(    yourItem.Length > 0)
   //do stuff
于 2013-06-04T12:49:13.823 に答える