Как отобразить результат значения даже ноль в c# Windows форме с LINQ - PullRequest
0 голосов
/ 06 февраля 2020

image_example

Привет, я использую winform Entity Framwork, и я пытаюсь отобразить Заказы в dataGridView с названием отдела и Roomnr и даже те без Roomnr, где Roomnr является нулевым, но показывает мне только те, с отделом и RoomId не является нулевым. Как я могу отобразить даже те отделы с RoomId == null?
Вот мой код:

var Customerorders = (from u in db.Orders
                      join s in db.Employee on u.Staffid equals s.EmployeeId
                      join d in db.Department on u.DepartmentId equals d.DepartmentId
                      join r in db.Room on u.RoomId equals r.RoomId
                      where u.OrderNr == 1005 || u.OrderNr == 1005 && u.RoomId == null
                      select new
                      {
                         CheckinoutId = u.CheckInAndOutId,
                         CheckinDate = u.CheckInDate,
                         Checkout = u.CheckOutDate,
                         Department = d.DepartmentName,
                         RoomNr = r.RoomNr,
                         Personal = s.FirstName+" "+s.LastName
                         }).ToList();
                         if(Customerorders != null) // I Tried even with out if condition
                         {

                          dgvOrders.DataSource = Customerorders;
                         }

Невозможно отобразить даже заказы без комнат? Пожалуйста, помогите

1 Ответ

1 голос
/ 06 февраля 2020

Это LEFT JOIN для DbSet<Room> в LINQ

var Customerorders = (from u in db.Orders
                      join s in db.Employee on u.Staffid equals s.EmployeeId
                      join d in db.Department on u.DepartmentId equals d.DepartmentId
                      join r in db.Room on u.RoomId equals r.RoomId into r2
                      from r3 in r2.DefaultIfEmpty()
                      where u.OrderNr == 1005
                      select new
                      {
                          CheckinoutId = u.CheckInAndOutId,
                          CheckinDate = u.CheckInDate,
                          Checkout = u.CheckOutDate,
                          Department = d.DepartmentName,
                          RoomNr = r3.RoomNr,
                          Personal = s.FirstName + " " + s.LastName
                      }).ToList();

И это просто решение для вашего запроса

var Customerorders = db.Orders.Where(
    item => item.OrderNr == 1005
).Select(
    item => new
    {
        item.CheckInAndOutId,
        item.CheckInDate,
        item.CheckOutDate,
        item.Department.DepartmentName,
        Personal = item.Employee.FirstName + " " + item.Employee.LastName,
        RoomNr = item.RoomId.HasValue ? item.Room.RoomNr : (int?)null
    }
);
...