Объедините 3 таблицы в. net базовая структура сущности - PullRequest
0 голосов
/ 31 марта 2020

Мне нужно получить весь список номеров с подробной информацией о бронировании и гостем, если есть какая-либо бронь с окном. объединить 3 таблицы, используя LINQ с ef. Вот как я это сделал.

var _list = (

                        from G in _DbEntity.ReservationGuestDetail
                        join R in _DbEntity.Room
                        on G.RoomNumber equals R.RoomNumber
                        join RE in _DbEntity.Reservation on G.ReservationNumber equals RE.ReservationNumber into RR
                        from Res in RR.DefaultIfEmpty()

                        where
                        G.Pmscustcode == PMSCustCode &&
                        R.PmsCustCode == PMSCustCode &&
                        R.IsDeleted == false &&
                        G.IsDeleted == false &&
                        Res.IsDeleted == false &&
                        Res.Pmscustcode == PMSCustCode

                        select new
                        {
                            RoomId = R.RoomId,
                            RoomNumber = R.RoomNumber,
                            RoomType = R.RoomTypeName,
                            ReservationDateFrom = G.ArrivalDateTime,
                            ReservationDateTo = G.DepartureDateTime,
                            ReservationNumber = Res.ReservationNumber,
                            ReservationStatus = Res.ReservationStatus,
                            GuestName = G.GuestFirstName + " " + G.GuestLastName
                        }
                            ).OrderBy(x => x.RoomId).ToList();

ОБНОВЛЕНИЕ: С помощью этого кода, его возврат только по бронированным номерам. Но мне нужно получить все номера, если есть заказ или нет.

Ответ:

[
        {
            "roomId": 1,
            "roomNumber": "K100",
            "roomType": "Standard King",
            "guestName": "Test user",
            "reservationStatus": "Expected",
            "reservationNumber": "20",
            "reservationDateFrom": "2020-03-31",
            "reservationDateTo": "2020-04-02"
        },
        {
            "roomId": 2,
            "roomNumber": "K101",
            "roomType": "Standard King",
            "guestName": "",
            "reservationStatus": "",
            "reservationNumber": "",
            "reservationDateFrom": "",
            "reservationDateTo": ""
        },
        {
            "roomId": 3,
            "roomNumber": "K102",
            "roomType": "Standard King",
            "guestName": "",
            "reservationStatus": "",
            "reservationNumber": "",
            "reservationDateFrom": "",
            "reservationDateTo": ""
        }]

1 Ответ

0 голосов
/ 01 апреля 2020

Попробуйте использовать ниже linq код:

var _list = (
                from R in _DbEntity.Room
                join G in _DbEntity.ReservationGuestDetail on R.RoomNumber equals G.RoomNumber into RG
                from x in RG.DefaultIfEmpty()

                join RE in _DbEntity.Reservation on x.ReservationNumber equals RE.ReservationNumber into GRE
                from y in GRE.DefaultIfEmpty()

                select new
                {
                    RoomId = R.RoomId,
                    RoomNumber = R.RoomNumber,
                    RoomType = R.RoomTypeName,
                    ReservationDateFrom = x.ArrivalDateTime,
                    ReservationDateTo = x.DepartureDateTime,
                    ReservationNumber = y.ReservationNumber,
                    ReservationStatus = y.ReservationStatus,
                    GuestName = x.GuestFirstName + " " + x.GuestLastName

                }).OrderBy(x => x.RoomId).ToList();
...