Linq 中的左外部连接不起作用

Left Outer Join in Linq not working

我正在尝试在 Linq 中进行左外连接,但下面的代码不起作用

 var result = from dataRows1 in agdt.AsEnumerable()
              join dataRows2 in hwt.AsEnumerable()
              on dataRows1.Field<string>("ID") equals dataRows2.Field<string>("HWID") 
              where ((dataRows2.Field<string>("HWID") == null) && 
                    (dataRows1.Field<string>("TYPE")=="a"))
              select dataRows1;

没有 where 子句我收到大约 37000 行,有了它我收到 0。agdt table 有 12000 行,hwt table 有 6000 行。这让人非常沮丧。有人可以帮忙吗?

您缺少 DefaultIfEmpty 方法调用。

根据我从您的查询中了解到的情况,它应该类似于:

var result = from dataRows1 in agdt.AsEnumerable()
          join dataRows2 in hwt.AsEnumerable()
          on dataRows1.Field<string>("ID") equals dataRows2.Field<string>("HWID") 
          into groupJoin
          from leftOuterJoinedTable in groupJoin.DefaultIfEmpty()
          where (leftOuterJoinedTable == null && 
                (dataRows1.Field<string>("TYPE")=="a"))
          select dataRows1;

在我看来,这在本质上与 运行 以下 SQL 查询

相同

SELECT DR1.* 来自 DataRows1 DR1 内连接 DataRows2 DR2 ON DR1.ID=DR2.HWID 在哪里 DR2.HWID 为空 和 DR1.Type='a'

本质上,您的 LINQ 是在执行内部联接,然后执行 where。要真正进行左连接,请参阅 link

LEFT OUTER JOIN in LINQ