2015-07-12 130 views
1

我有一個SQL查詢,我正在做一個左連接。它工作正常。轉換SQL左連接到Linq表達式左連接

SELECT Table1.Id, Table1.Comments, Table1.IdListDef 
FROM Table2 INNER JOIN Table1 ON Table2.Id = Table1.IdListDef 
LEFT JOIN Table3 
ON Table1.Id = Table3.IdComments 
WHERE Table1.IdListDef = 36 and Table2.IdRev = 1075 and Table3.IdAutor IS NULL 

我需要從這個查詢轉換爲Linq Expression從C#。我該怎麼做?我不知道如何轉換這個包含左連接的查詢。

+5

請不要只是轉儲SQL並要求轉換。至少顯示一個類模型,以便導航屬性和關聯的多樣性是可見的。此外,展示你自己的第一個努力。他們向我們澄清的比你想象的更多。特別是導航屬性對連接非常重要。你可能不需要任何'join'語句。 –

回答

1

它應該是這個樣子:

var result = (
    from item1 in table1 
    join item2 in table2 on item1.IdListDef equals item2.Id 
    join item3 in table3 on item1.Id equals item3.IdComments into finalGroup 
    from finalItem in finalGroup.DefaultIfEmpty() 
    where item1.IdListDef == 36 && item2.IdRev == 1075 && finalItem.IdAutor == null 
    select new 
    { 
     item1.Id, item1.Comments, item1.IdListDef 
    }).ToList(); 

除了你的評論,如果你願意嘗試任何項目都有你的外在參數的ID你可以使用linq 任何擴展方法:

bool idExists = result.Any(item => item.id == idAutor); 
+0

真的很好!有效!謝謝! 你知道如何在這個選擇中計數嗎? 現在我想要計算idAutor是否存在,如果不存在,則會計數= 0。IdAutor現在來自參數。 – Victor

+0

@Victor你想看看結果中的item1.Id是否等於你的外部IdAutor參數? – msmolcic

-1

嘗試此查詢

VAR OBJLIST=(FROM A IN CONTEX.TABLE2 
     FROM B IN CONTEX.TABLE1.WHERE(X=>X.IdListDef==a.Id && B.IdListDef==36 && B.IdRev==1075) 
     FROM C IN CONTEX.TABLE3.WHRE(X=>X.IdComments==a.Id).DefaultEmpty() 
     where C.IdAutor==NULL 
     select new{a.Id, a.Comments, a.IdListDef }).ToList() 
+0

這不會編譯,C#區分大小寫。 – svick