Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为linq联接结果中的空值设置默认值_C#_Linq_Join - Fatal编程技术网

C# 为linq联接结果中的空值设置默认值

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

当我们有两个表有一对零或一个关系时。表A中可能有记录,但表B中没有相应的记录。
因此联接操作会为这些记录生成空值。 我的目标是用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 for
b.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,你可以在这里找到更好的解释