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
我正在尝试在 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