繁体   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