C# 为linq联接结果中的空值设置默认值
当我们有两个表有一对零或一个关系时。表A中可能有记录,但表B中没有相应的记录。C# 为linq联接结果中的空值设置默认值,c#,linq,join,C#,Linq,Join,当我们有两个表有一对零或一个关系时。表A中可能有记录,但表B中没有相应的记录。 因此联接操作会为这些记录生成空值。 我的目标是用defalut值替换这些空值。 我的问题是,我们如何在数据库上下文和C#上下文中(当我们使用标准C#集合而不是db表时)使用linq实现这一点 示例表: tableA{id , name , info} tableB{id , tableAid , number} 查询: var result= from a in tableA join b in table
因此联接操作会为这些记录生成空值。 我的目标是用defalut值替换这些空值。
我的问题是,我们如何在数据库上下文和C#上下文中(当我们使用标准C#集合而不是db表时)使用linq实现这一点 示例表:
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
如果
b
为空,因为在另一端找不到它,您可以使用的null
检查,可能与a forb.number
组合使用:
number = b != null ? (b.number ?? 0) : 0;
对于您的场景,您需要在linq中使用left join, 之后,@代码将工作
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 }
你能发布更多细节吗?表、linq查询……听起来比方法简单。我想没有必要??我想没有。你试过了吗?它不起作用,因为找不到它,它甚至在要检查的连接结果中都不可用@哈梅德纳塞里:没错,另一个答案解决了这个问题。我只是专注于你的实际问题,而不是你的问题中的错误。它奏效了,谢谢。请进一步解释,在这种情况下分组是如何工作的???@hamednasari,你可以在这里找到更好的解释