簡體   English   中英

框架中的NULL子集合,在LINQPad中可以

[英]NULL Subcollections in framework, OK in 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行為。

如果要使用pdMstrSku.Prepack,則必須將其包括在外部表中。 當您將其包括在聯接表中時,將無法選擇。

像下面的示例一樣在第一行中使用它

.Include(x => x.OrderDetails.Select(y => y.MstrSku)).ToList(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM