开发者

Why does this Linq left outer join not work as expected?

I have two lists, both using the same class (Part). The first list is the "master" list (engineerParts), the second (partDefaults) is the list of attribute values for those parts.

The first list contains 263 items, the second, 238. So, the final list should contain 263. However it doesn't, it contains 598!!

var partsWithDefaults = from a in engineerParts
                                    join b in partDefaults on
                                    new { a.PartNumber, a.Revision }
                                    equals
                                    new { b.PartNumber, b.Revision } into j1
                                    from j2 in j1.DefaultIfEmpty()
                                    select new Part()
                                    {
                                        NewPart = isNewPart(a.PartNumber, PadRevision(a.Revision), concatenateRevision),
                                        PartNumber = concatenateRevision == true ? string.Concat(a.PartNumber, PadRevision(a.Revision)) : a.PartNumber,
         开发者_Go百科                               Revision = concatenateRevision == true ? "" : a.Revision,
                                        ParentPart = a.ParentPart,
                                        Description = a.Description,
                                        BoMQty = a.BoMQty,
                                        UoM = (j2 != null) ? j2.UoM : null,
                                        ClassId = (j2 != null) ? j2.ClassId : null,
                                        ShortDescription = (j2 != null) ? j2.ShortDescription : null,
                                        ABCCode = (j2 != null) ? j2.ABCCode : null,
                                        BuyerId = (j2 != null) ? j2.BuyerId : null,
                                        PlannerId = (j2 != null) ? j2.PlannerId : null,
                                        OrderPolicy = (j2 != null) ? j2.OrderPolicy : null,
                                        FixedOrderQty = (j2 != null) ? j2.FixedOrderQty : null,
                                        OrderPointQty = (j2 != null) ? j2.OrderPointQty : null,
                                        OrderUpToLevel = (j2 != null) ? j2.OrderUpToLevel : null,
                                        OrderQtyMin = (j2 != null) ? j2.OrderQtyMin : null,
                                        OrderQtyMax = (j2 != null) ? j2.OrderQtyMax : null,
                                        OrderQtyMultiple = (j2 != null) ? j2.OrderQtyMultiple : null,
                                        ReplenishmentMethod = (j2 != null) ? j2.ReplenishmentMethod : null,
                                        ItemShrinkageFactor = (j2 != null) ? j2.ItemShrinkageFactor : null,
                                        PurchasingLeadTime = (j2 != null) ? j2.PurchasingLeadTime : null,
                                        MFGFixedLeadTime = (j2 != null) ? j2.MFGFixedLeadTime : null,
                                        PlanningTimeFence = (j2 != null) ? j2.PlanningTimeFence : null,
                                        FulfillMethod = (j2 != null) ? j2.FulfillMethod : null,
                                        ItemStatus = (j2 != null) ? j2.ItemStatus : null,
                                        TreatAsEither = (j2 != null) ? j2.TreatAsEither : false,
                                        AltItem1 = (j2 != null) ? j2.AltItem1 : null,
                                        AltItem2 = (j2 != null) ? j2.AltItem2 : null,
                                        AltItem3 = (j2 != null) ? j2.AltItem3 : null,
                                        AltItem4 = (j2 != null) ? j2.AltItem4 : null,
                                        AltItem5 = (j2 != null) ? j2.AltItem5 : null,
                                        DesignAuthority = (j2 != null) ? j2.DesignAuthority : null,
                                        Level = a.Level
                                    };

            return partsWithDefaults.ToList<Part>();


Turns out it was a data issue. The person that had sent me the data in Excel for the second list had left duplicates in it!!!!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜