如何在linq中加入两个查询

时间:2013-03-01 10:03:53

标签: c# mysql linq lambda

我想离开加入两个查询。在第一个查询将包含4个记录,第二个查询将包含0或更多记录,最多4个。我想加入这两个记录,并希望得到4条记录。如果第二个查询中有任何记录,那么我想要第二个表的权限。我写了类似的代码。

 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();

但它正在抛出异常

1 个答案:

答案 0 :(得分: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
    };