[英]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.