2011-03-15 58 views
0

我試圖從兩個表中獲取數據。 Todo_Lists和Todo_Items。我管理加入這兩個是這樣的:LINQ to SQL連接表特殊混合

from list in dataContext.Todo_Lists 
from item in dataContext.Todo_List_Items 
where list.UserID == userID && list.ListID == item.ListID 
select new 
{ 
    ListID = list.ListID, 
    ListName = list.ListName, 
    ItemID = item.ItemID, 
    ItemName = item.ItemName 
}; 

如果我只是想與他們的項目列表,這一切都很好。但我需要返回所有列表以及哪裏有我需要它們加入的項目。

謝謝您的任何信息。

+0

我很困惑。 – 2011-03-15 21:17:04

回答

0

什麼聽起來像一個左外連接:(未經測試)

from list in dataContext.Todo_Lists 
where list.UserID == userID 
join itemTemp in dataContext.Todo_List_Items on list.ListID equals item.ListID into itemGroup 
from item in itemGroup.DefaultIfEmpty() 

select new 
{ 
    ListID = list.ListID, 
    ListName = list.ListName, 
    ItemID = item == null? null : item.ItemID, 
    ItemName = item == null? null : item.ItemName 
}; 

你可能需要轉換爲有條件工作的零點 - 我把它留下了,因爲我不知道類型。有關使用linq的左外連接的更多信息,請參閱here

+0

非常感謝!沒有你的意見,我不會解決問題。你可以閱讀我寫的關於我在這裏做了什麼http://www.hackviking.com/2011/03/linq-to-sql-left-join-with-null-values/ – 2011-03-16 19:01:19

1
from Lists in dataContext.Todo_Lists 
where Lists.UserID == userID 
select new 
{ 
    ListID = Lists.ListID, 
    ListName = Lists.ListName, 
    Items = dataContext.Todo_List_Items 
          .Where(i => Lists.ListID == i.ListId) 
          .Select(new { 
              ItemID = Items.ItemID, 
              ItemName = Items.ItemName 
             } 
}; 

這會給你空,如果沒有在Items

+0

非常感謝!沒有你的意見,我不會解決問題。你可以閱讀我寫的關於我在這裏做了什麼http://www.hackviking.com/2011/03/linq-to-sql-left-join-with-null-values/ – 2011-03-16 19:00:53