LINQ to SQL соединяют таблицы специальным смешиванием - PullRequest
0 голосов
/ 16 марта 2011

Я пытаюсь получить данные из двух таблиц. Todo_Lists и Todo_Items. Мне удалось присоединиться к двум, как это:

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 
};

Все в порядке, если я просто хочу списки с Предметами на них. Но мне нужно вернуть все списки, и там, где есть элементы, я хочу их объединить.

Благодарю за любую информацию.

Ответы [ 2 ]

1 голос
/ 16 марта 2011
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 голосов
/ 16 марта 2011

звучит как левое внешнее соединение: (не проверено)

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...