如何在linq中左连接两个查询
本文关键字:两个 查询 连接 linq | 更新日期: 2023-09-27 18:01:37
我想左连接两个查询。其中第一个查询将包含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();
但是它抛出了一个异常
在这种情况下有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
};