[英]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行,並且收到agdt
表具有12000行, hwt
表具有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查詢相同
選擇DR1。*從DataRows1 DR1內連接DataRows2 DR2在DR1.ID = DR2.HWID上DR2.HWID為NULL並且DR1.Type ='a'
本質上,您的LINQ正在執行內部聯接,然后執行where。 要真正進行左聯接,請參見鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.