簡體   English   中英

SQL到SQL連接語句中的'AND'將Linq左連接

[英]SQL to Linq Left Join with 'AND' in the SQL Join Statement

我有一個可以完美轉換為Linq的SQL查詢。 我需要將所有記錄返回到一個表並將其連接到第二個表。 我需要返回第一個表中的所有結果以及第二個表中的結果,其中第二個表中特定字段的值等於變量值(在下面的示例中為75)或返回null。

因此,結果中的總行數應為table1中的總行數。 來自table2的聯接的那部分行應該顯示table2的值(其中存在記錄的值為75),或者顯示null(不存在該記錄的位置)。

編輯:我應該提到t1.field1是一個int和t2.field1是可為空的int。

我嘗試了多個linq語句,對聯接進行分組,詢問同事以及在眼睛流血之前一直使用Google搜索。 我被卡住了。 我意識到我的問題措詞可能不清楚,如果不清楚,我會提前道歉。

提前致謝。 克里斯

SQL查詢:

SELECT *
FROM table1 AS t1 LEFT OUTER JOIN 
table2 AS t2 ON t1.field1 = t2.field1 AND t2.field2 = 75

使用DefaultIfEmpty請參閱LINQ-左聯接,分組依據和計數以及http://msdn.microsoft.com/zh-cn/library/bb397895.aspx,以獲取有關如何實現此目的的示例

一個有效但不如我預期的答案:

var q = from item1 in table1  
            join item2 in table2 on new { Field1=(int?)item1.Field1, Field2=75 }  
                   equals new { item2.Field1, item2.Field2 } into gj  
            from subItem2 in gj.DefaultIfEmpty()  
            select new { F1= item1.Field1, F2 = ( subItem2 == null ? string.Empty : subItem2.Field2.ToString()) };

我看不到在哪里適合(Field2 = 75)中的where子句,因此改為使用表之間的復合鍵來實現相同的效果。

丑陋的第二位強制轉換為可為null的int,因為復合鍵中的或Field1使其可以等於表2上的對應字段。

顯然,您返回的匿名類型是您想要的任何值。請注意,您不能返回null,這就是為什么我顯示Field2的字符串表示形式以便您可以看到第二個表返回的原因。

謝謝你的回復。 因為我需要一些空值,但只需要特定id為空的值,而不是所有值都為空的值,上述任何解決方案都無法使用。 如果可能,在linq中執行此操作似乎非常困難。

因此,為了節省時間,我決定采用有效的SQL查詢並將其轉換為存儲過程和函數導入。 我覺得這可能不是正確的方法,但是時間始終是一個因素。

再次感謝您的回復。

暫無
暫無

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

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