使用linq确定外连接是否匹配

时间:2017-10-26 20:59:52

标签: c# sql-server linq

我有两个表A和B,我可以用linq加入表。如果外连接有匹配,我需要一种方法来查找是否可以与查询一起使用布尔值。例如,如果tableA中存在记录而不是tableB中,则需要布尔值为true。这可以使用IF在SQL中完成,我想知道在Linq中是否有类似的东西

var result = from a in tableA
             join b in tableB on a.Id equals b.userId into group1
             from g1 in group1.DefaultIfEmpty()
             select new{id = g1.Id,userId = g1.userId,boolIsPresent =(present in tableA not in tableB)}.ToList();

2 个答案:

答案 0 :(得分:1)

目前,您正在执行inner join,而不是left outer join,这意味着只检索两个表中存在的记录/对象。因此你的bool boolIsPresent总是 true

编辑:

测试 tableA 中是否存在记录,并且 tableB 中没有匹配的记录,只需检查g1 != null,即:

var result = from a in tableA
             join b in tableB on a.Id equals b.userId into group1
             from g1 in group1.DefaultIfEmpty()
             select new 
             {
                  id = g1 != null? g1.Id : enterDefault,
                  userId = g1 != null? g1.userId : enterDefault, 
                  boolIsPresent = g1 != null
             }.ToList();

答案 1 :(得分:0)

这将是

boolisPresent = b != null

一旦你的外部联接工作了!