2012-12-21 153 views
1

我需要這個SQL轉換爲LINQ查詢,但一如既往,我不能弄明白:(轉換SQL到LINQ,與左連接

想我需要看起來有點深入的LINQ。

select butik.preferences.pref,isnull(butik.userpreferences.selected,0) as selected 
from butik.preferences 
left join butik.userpreferences 
    on butik.preferences.id = butik.userpreferences.pref AND 
    butik.userpreferences.userid = 2 

感謝 基督教

+0

可能重複[LINQ to SQL的 - 左外連接有多個連接條件(http://stackoverflow.com/questions/1122942/linq-to-sql-left-outer-join-with -multiple-join-conditions) – Yuck

+0

http://stackoverflow.com/questions/9171063/convert-sql-to-linq-left-join-with-null – Yuck

+0

可能的重複有一個MSDN頁面[101 LINQ示例]( http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b)通過檢查不同的例子,可以幫助你獲得更好的LINQ體驗。 – Tom

回答

1

有一個在LINQ一個left join沒有直接的翻譯。但也有很多方法可以存檔你想要什麼:)

from item in butik.preferences 
select new 
{ 
    Pref = butik.preferences.pref, 
    IsSelected = 
     butik.userprefences.Any(up => up.pref == item.id && up.userid == 2) 
     ? butik.userpreferences.First(up => up.pref == item.id && up.userid == 2).selected 
     : false; 
} 
+0

在LINQpad中工作,但查詢返回錯誤的結果在VS :( –

+0

實際上我的代碼是脫節的,所以我得到一個無彈性的 –

+0

你得到的答案,因爲這是我工作的一個:) –

0

請嘗試使用下面的代碼片段。

var Query = (from c in butik.preferences 
    join v in butik.userpreferences.Where(v => v.userid == 2).DefaultIfEmpty() on c.id equals v.pref into JoinUserPref 
    from v in JoinUserPref.DefaultIfEmpty() 
    select new 
    { 
     pref = c.pref, 
     selected = (v.selected == null ? 0 : v.selected) 
    }); 

如果上面的代碼片段不起作用,請嘗試下面的LINQPad。的

http://www.linqpad.net/

+0

工程linqpad,但查詢返回錯誤的結果在VS :( –