0

2つのクエリを左結合したい。その最初のクエリには4つのレコードが含まれ、2番目のクエリには4つまでの0個以上のレコードが含まれます。これらの両方を結合して4つのレコードを取得したいと思います。2番目のクエリにレコードがある場合は、2番目のテーブルからのアクセス許可が必要です。私はのようなコードを書きました。

 var finalquery = values.GroupJoin(records, i => i.typeid, j => j.typeid, (i, j) => new { i, j }).SelectMany(i => i.j.DefaultIfEmpty(), (i, j) => new {
            id = i.i.typeid,
            Permission = (j.premission ==null)?null:j.premission

        }).ToArray();

しかし、それは例外を投げています

4

1 に答える 1

0

この条件でNullReferenceExceptionが発生します。

j.premission ==null

jがnull(デフォルトの場合)の場合にスローされます。

var finalquery = values.GroupJoin(records, 
                                  v => v.typeid, 
                                  r => r.typeid, 
                                 (v, g) => new { v, g })
                       .SelectMany(x => x.g.DefaultIfEmpty(), 
                                  (x, r) => new { 
                                     id = x.v.typeid,
                                     Permission = r == null ? null : r.permission
                                  })
                       .ToArray();

またはクエリ構文を使用する場合(美しさのために配列への変換は省略):

 var finalquery =
    from v in values
    join r in records on v.typeid equals r.typeid into g
    from r in g.DefaultIfEmpty()
    select new {
        id = v.typeid,
        Permission = r == null ? null : r.permission
    };
于 2013-03-01T10:21:51.177 に答える