在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联接的结果中为null设置默认值

对于您的场景,您需要在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;