Как преобразовать несколько левых соединений SQL в Linq-To-SQL

Чтобы просмотреть более полный список, который вы можете запустить:

show session status;

или

show global status;

См. эту ссылку , чтобы лучше понять использование.

Если вы хотите узнать подробности о базе данных, которую вы можете запустить:

status;

1
задан Cœur 5 April 2018 в 10:35
поделиться

3 ответа

Я обнаружил свою проблему, я выбрал

useritems.FirstOrDefault().item_number

То, что я выбрал (и FirstOrDefault!), Вместо того, что я использовал для своего соединения:

ui.item_number

Итак, мой полный запрос linq есть

var users = (from u in db.users
            join ug in db.user_to_groups on p.user_id equals pg.user_id into pgrp
            from ug in pgrp.DefaultIfEmpty()
            join g in db.groups on pg.group_id equals g.group_id into groups
            from g in groups.DefaultIfEmpty()
            join ui in db.user_items on u.user_id equals ui.user_id into useritems 
            from ui in useritems.DefaultIfEmpty()                          

        select new { user = u, item_number = ui == null ? string.Empty : ui.item_number, usergroup = g == null ? string.Empty : g.name});

Спасибо за помощь!

1
ответ дан 2 September 2019 в 23:39
поделиться

Вам нужно будет посмотреть на конструкцию join ... into ... .

Вот пример из MSDN

... Еще кое-что, что нужно учесть ... LINQ позволит вам превратить вашу простую структуру таблицы в сложную иерархию. Другой вариант помимо левых объединений - это вложенные запросы. Может быть, что-то вроде этого ...

var selected = from user in users
               select new
               {
                   user,
                   items = from item in user_items
                           where item.user_id == user.user_id
                           join it in item_types
                               on item.item_type_id equals it.item_type_id
                           select it,
                   groups = from ug in user_to_groups
                            where ug.user_id == user.user_id
                            join @group in groups
                                on ug.group_id equals @group.group_id
                            select @group.name,
               };
1
ответ дан 2 September 2019 в 23:39
поделиться

Ваш запрос можно было бы написать более кратко, если вы определите некоторые ассоциации между вашими объектами:

from u in db.Users
from ug in u.User_To_Groups.DefaultIfEmpty()
let g = ug.Group
from ui in u.UserItems.DefaultIfEmpty()
select new
{
  user = u,
  item_number = ui == null ? string.Empty : ui.item_number,
  usergroup = g == null ? string.Empty : g.name
});
0
ответ дан 2 September 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: