我正在尝试在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
表有12000行,hwt
表有6000.这非常令人沮丧。有人可以帮忙吗?
答案 0 :(得分:1)
您错过了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;
答案 1 :(得分:0)
在我看来,这实际上与运行以下SQL查询相同
选择 DR1。* 从DataRows1 DR1 INNER JOIN DataRows2 DR2 ON DR1.ID = DR2.HWID 哪里 DR2.HWID为空 和 DR1.Type =&#39;一个&#39;
基本上你的LINQ正在进行内连接,然后执行where。要真正进行左连接,请参阅链接