在linq联接的结果中为null设置默认值
本文关键字:null 设置 默认值 结果 linq | 更新日期: 2023-09-27 17:59:13
当我们有两个具有一对零或一关系的表时。表A中可能存在在表B中没有对应记录的记录。
因此,Join操作导致这些记录的值为空。我的目标是用实际值替换这些Nulls
我的问题是,我们如何在数据库上下文和C#上下文中使用linq(当我们有标准的C#集合而不是数据库表时)做到这一点?
示例表:
tableA{id , name , info}
tableB{id , tableAid , number}
查询:
var result= from a in tableA join b in tableB on b.tableAid equals a.id
select new {id = a.id , name = a.name , number = b.number }
如果表B中没有表a中特定记录的记录,则结果中的数字可能为空。
我需要这样一个东西:
if(result[i].number==null)result[i].numer=1
对于您的场景,您需要在linq中使用左联接,之后@Patrick Hofman的代码将工作
var result= from a in tableA join b in tableB on b.tableAid equals a.id
into grp from c in grp.DefaultIfEmpty()
select new {id = a.id , name = a.name , number = c != null ? (c.number ?? 0) : 0 }
如果b
为null,由于在另一端找不到它,您可以使用带有三元运算符的null
检查,可能与b.number
:的null合并运算符组合使用
number = b != null ? (b.number ?? 0) : 0;