Отсутствуют «пустые» записи - PullRequest
0 голосов
/ 20 декабря 2018

Я постараюсь сделать это коротким: я новичок в LINQ.Итак, там.

У меня есть три таблицы, в которые EntityFrame встроен в мое решение:

Employees        Desks          Rooms
--------------   ------------   ------------
FirstName        DeskId         RoomId
DeskId           RoomId         RoomName
                 Color          HasWindows
                 Width   

Мне нужно представление с:

Employee   Room name              
----------------------------------
Lumberg    Corner Office         
Milton     Storage in basement   
Peter      Cubicle 214    

Итак, я создалEmployeeRoomListViewModel и заполните его, используя JOINs в моем LINQ.Никакого пота, за исключением того, что мне не хватает некоторых записей.А именно тех Сотрудников без назначенного стола (DeskId является нулем).Они мне тоже нужны.

Вот мой LINQ:

from Emp in db.Employees 
join D in db.Desks on D.DeskId equals Emp.DeksId
join R in db.Rooms on D.RoomId equals R.RoomId
          select new EmployeeRoomListViewModel
          {
              Employee = Emp.FirstName,
              Room = R.RoomName
          }).ToList();

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Ваш запрос правильный, но вам просто нужно добавить в них "Into Alias" и DefaultIfEmpty ().

from Emp in db.Employees 
join Des in db.Desks on Des.DeskId equals Emp.DeksId into SomeThing 
from Des in SomeThing.DefaultIfEmpty();
0 голосов
/ 20 декабря 2018

Это решит вашу проблему

from Emp in db.Employees 
join D in db.Desks on D.DeskId equals Emp.DeksId into desklist from deskjoin in 
desklist.DefaultIfEmpty()
join R in db.Rooms on deskjoin.RoomId equals R.RoomId into roomlist from roomjoin in roomlist.DefaultIfEmpty() select new EmployeeRoomListViewModel
                      {
                          Employee = Emp.FirstName,
                          Room = roomjoin.RoomName
                      }).ToList();

в первый раз вам нужно взять таблицу левого соединения сотрудников с таблицей Столы, а затем вам нужно выполнить левое соединение с результатами сотрудников и соединения рабочего стола

В этом «в desklist from deskjoin in desklist.DefaultIfEmpty ()» используется для запроса левого соединения

0 голосов
/ 20 декабря 2018

вам нужно использовать предложение DefaultIfEmpty для левого внешнего соединения

from Emp in db.Employees 
  join D in db.Desks on D.DeskId equals Emp.DeksId into employeeDesks 
    from ed in employeeDesks.DefaultIfEmpty() 
  join R in db.Rooms on D.RoomId equals R.RoomId into deskRooms
    from dr in deskRooms.DefaultIfEmpty()
  select new EmployeeRoomListViewModel
  {
      Employee = Emp.FirstName,
      Room = R.RoomName
  }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...