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!!!!
精彩评论