簡體   English   中英

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行,並且收到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。 要真正進行左聯接,請參見鏈接

LINQ的左外連接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM