LINQ 到 SQL 左连接,需要检查右表的空值
本文关键字:检查 空值 SQL 连接 LINQ | 更新日期: 2023-09-27 18:37:14
我在 LINQ to SQL 中左连接,所以我的问题是在选择正确的表字段时,我正在检查每个字段,无论连接的对象是否为 null,这是正确的方法吗? 或者有没有其他方法可以做到这一点? 我的查询就像
from u in user
join x in employeee on u.id equals x.userId
into ux from ujoinx in ux.DefaultIfEmpty()
join y in department on x.id equals y.employeeId
into xy from xjoiny in xy.DefaultIfEmpty()
select new {
EmployeeSal = ujoinx!=null?ujoinx.employeeSal:0, // see checkig for null
EmployeeTax = ujoinx!=null?ujoinx.employeeTax:0, // in this 3 lines
UserName = u.username,
DeptName = xjoiny!=null?xjoiny.name:"" //is this a correct way ?
}
查询正确生成答案,但如果我不检查这几个字段是否为 null它的投掷object reference not set.....error
.在这里,DefaultIfEmpty()
到底在做什么??
你所做的是正确的。
从 msdn 中,DefaultIfEmpty 返回:
一个 IEnumerable
对象,其中包含 如果源为空,则键入;否则,来源。
换句话说,当集合为空时,它将返回 T 的默认值。引用类型的默认值为 null - 这就是在选择 DeptName 时必须检查 null 的原因。
在这种情况下,
DefaultIfEmpty 会在评估的左侧提供一个空对象。因此,尝试调用ujoinx.employeeSal将返回未设置的对象引用,因为ujoinx为空。