NULL Подколлекции в фреймворке, ОК в LINQPad

У меня есть этот унаследованный код представления SQL, который я преобразовал в linq, чтобы получить некоторые данные за это время, в LINQPad он работает, как и ожидалось, но после передачи его в мое решение на C# подколлекции не загружаются.

  var query = from poh in _pckOrderHeadeRepository.GetAllIncluding(pd => pd.PckOrderDetail)
                join mcs in _mstrConsigneeShipToRepository.GetAll() on poh.RouteId equals mcs.Consignee
        //select new {poh, mcs}; //works
        join det in (
            from d in _pckOrderDetailRepository.GetAllIncluding(pd=> pd.PckOrderHeader, pd => pd.MstrSku)
            join s in (
                from shpCartonHeader in _shpCartonHeaderRepository.GetAll()
                group shpCartonHeader by new
                {
                    shpCartonHeader.OrderNum
                }
                into g
                select new
                {
                    g.Key.OrderNum,
                    CartonWeight = g.Sum(p => p.TotalWeight)
                }) on d.PckOrderHeader.OrderNum equals s.OrderNum into sJoin
            from s in sJoin.DefaultIfEmpty()
            group new {d.PckOrderHeader, d, d.MstrSku, s} by new
            {
                d.PckOrderHeader.OrderNum
            }
            into g
            select new
            {
                g.Key.OrderNum,
                OrderQty = g.Sum(p => p.d.OrderQty),         
                OrderWeightOpen = (decimal?)g.Where(p => p.d.PckOrderHeader.OrderStat.Equals("OPEN")).Sum(p => p.d.MstrSku.Weight * p.d.OrderQty),
                OrderWeightReleased = (decimal?)g.Where(p => p.d.PckOrderHeader.OrderStat.Equals("RELEASED")).Sum(p => p.d.MstrSku.Weight * p.d.PickingQty + p.s.CartonWeight),
                 OrderWeightPacked = (decimal?)g.Where(p => p.d.PckOrderHeader.OrderStat.Equals("PACKED")).Sum(p => p.s.CartonWeight),
                PrePack = g.Max(p => p.d.MstrSku.Prepack)
            }) on poh.OrderNum equals det.OrderNum
        join toa in _shpTrailerOrderAssignmentRepository.GetAll() on poh.OrderNum equals toa.OrderNum into
        toaJoin
        from toa in toaJoin.DefaultIfEmpty()

        select new
        {
            det,
            poh,
            toa,
            mcs
        };

эта часть в частности:

 select new
            {
                g.Key.OrderNum,
                OrderQty = g.Sum(p => p.d.OrderQty),         
                OrderWeightOpen = (decimal?)g.Where(p => p.d.PckOrderHeader.OrderStat.Equals("OPEN")).Sum(p => p.d.MstrSku.Weight * p.d.OrderQty),
                OrderWeightReleased = (decimal?)g.Where(p => p.d.PckOrderHeader.OrderStat.Equals("RELEASED")).Sum(p => p.d.MstrSku.Weight * p.d.PickingQty + p.s.CartonWeight),
                OrderWeightPacked = (decimal?)g.Where(p => p.d.PckOrderHeader.OrderStat.Equals("PACKED")).Sum(p => p.s.CartonWeight),
                PrePack = g.Max(p => p.d.MstrSku.Prepack)
            }) on poh.OrderNum equals det.OrderNum

например это:

PrePack = g.Max(p => p.d.MstrSku.Prepack) // MstrSku is not loaded

и свойство внутри pd (PckOrderDetail)

public virtual MstrSku MstrSku { get; set; }

Эквивалентный запрос в linqpad работает правильно, поэтому мне интересно, чего мне не хватает, чтобы правильно загрузить подчиненные свойства для имитации поведения LINQPads.

1 ответ

Если вы хотите использовать pdMstrSku.Prepack, вы должны включить его во внешнюю таблицу. когда вы включаете его в объединенную таблицу, вы не можете выбрать.

используйте его в первой строке, как образец ниже

.Include(x => x.OrderDetails.Select(y => y.MstrSku)).ToList(); 
Другие вопросы по тегам