Как избежать сложности при объединении более 3 таблиц в лямбда-выражениях Linq - PullRequest
0 голосов
/ 17 мая 2019

Исходя из фона SQL, я привык объединять 5-8 таблиц в один запрос. Я не могу представить себе то же самое с синтаксисом лямбда-выражений Linq. Здесь я присоединяюсь к 4-5 таблицам / коллекциям.

EG:

var viewmodel = logs.Join(CargoElements.lstContainerLoadStatus.ToList(), l => l.LoadStatus, ls => ls.Value, (x, ls) =>
                   new
                   {
                       log = x,
                       LoadStatusDesc = ls.Text
                   })
                   .Join(db.CargoContainerSize, log => log.log.CargoContainerSizeID, ccsize => ccsize.Id, (log, ccsize) => new
                   {
                       log = log,
                       CargoContainerSizeIDDesc = ccsize.Size
                   }).Join(db.CargoContainerType, log => log.log.log.CargoContainerTypeID, cct => cct.Id, (log, cct) => new
                   {
                       log = log,
                       CargoContainerTypeIDDesc = cct.Name
                   }).GroupJoin(db.CargoFrom, log => log.log.log.log.CargoFromID, cf => cf.ID, (log, cf) => new
                   {
                       log = log,
                       cf = cf
                   }).SelectMany(temp => temp.cf.DefaultIfEmpty(), (temp, cf) => new
                   {
                       log = temp,
                       CargoFromIDDesc = cf.Description
                   }
                   )
                   .Select(x => new ContainerInLogsVM
                   {

                       ContainerInLogID = x.log.log.log.log.log.ContainerInLogID,
                       ContainerInID = x.log.log.log.log.log.ContainerInID,
                       CargoID = x.log.log.log.log.log.CargoID,
                       LoadStatus = x.log.log.log.log.log.LoadStatus,
                       LoadStatusDesc = x.log.log.log.log.LoadStatusDesc,
                       Shipper = x.log.log.log.log.log.Shipper,
                       CnFAgentName = x.log.log.log.log.log.CnFAgentName,
                       ShippingBill = x.log.log.log.log.log.ShippingBill,
                       ContainerNo = x.log.log.log.log.log.ContainerNo,
                       CargoContainerSizeID = x.log.log.log.log.log.CargoContainerSizeID,
                       CargoContainerSizeIDDesc = x.log.log.log.CargoContainerSizeIDDesc,
                       CargoContainerTypeID = x.log.log.log.log.log.CargoContainerTypeID,
                       CargoContainerTypeIDDesc = x.log.log.CargoContainerTypeIDDesc,
                       OtherType = x.log.log.log.log.log.OtherType,
                       VesselNo = x.log.log.log.log.log.VesselNo,
                       ShipperBillNo = x.log.log.log.log.log.ShipperBillNo,
                       SealOTLNo = x.log.log.log.log.log.SealOTLNo,
                       VoyageNo = x.log.log.log.log.log.VoyageNo,
                       BLNumber = x.log.log.log.log.log.BLNumber,
                       Purpose = x.log.log.log.log.log.Purpose,
                       CargoFromID = x.log.log.log.log.log.CargoFromID,
                       CargoFromIDDesc = x.CargoFromIDDesc,
                       OtherFrom = x.log.log.log.log.log.OtherFrom,
                       Status = x.log.log.log.log.log.Status,
                       Remark = x.log.log.log.log.log.Remark,
                       StatusChangedOn = x.log.log.log.log.log.StatusChangedOn,
                       StatusChangedBy = x.log.log.log.log.log.StatusChangedBy,
                       StatusChangedByDesc = "",
                       SysRemark = x.log.log.log.log.log.SysRemark
                   }

                   ).ToList();

Это смешно! Или я делаю это неправильно? Должен быть лучший путь в LINQ. Я ищу ответы предпочтительно в лямбда-выражениях.

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