private int FindExactMatches(Sku sourceSku) { IQueryable <Sku> skuFilter = from sku in AryaTools.Instance.InstanceData.Dc.Skus //where sku.SkuInfos.Any(si => si.Active && leftTaxIds.Contains(si.TaxonomyID)) select sku; var schemaAttributes = GetInSchemaAttributes(sourceSku.Taxonomy); if (schemaAttributes.Count == 0) { return(0); } //Must match Brand //var brandAttribute = Attribute.GetAttributeFromName(BrandName, true); //if (!schemaAttributes.Contains(brandAttribute)) // schemaAttributes.Add(brandAttribute); bool hasValues = false; string matchType = "Exact"; foreach (var att in schemaAttributes) { var attribute = att; var values = sourceSku.GetValuesForAttribute(attribute.AttributeName, true).Select(ed => ed.Value).ToList(); if (values.Count == 0 || values.Any(val => _dontCareValues.Contains(val))) { continue; } if (values.Any(val => _notDiscernibles.Contains(val))) { matchType = "Potential"; continue; } hasValues = true; skuFilter = skuFilter.Where( sku => sku.EntityInfos.Any( ei => ei.EntityDatas.Any( ed => ed.Active && ed.AttributeID.Equals(attribute.ID) && values.Contains(ed.Value)))); } if (!hasValues) { return(0); } var targetSkus = skuFilter.Distinct().ToList(); int newLinkCount = 0; foreach (var targetSku in targetSkus) { if (targetSku.Taxonomy.ToString().Contains(">Images>")) { continue; } if (CreateSkuLink(targetSku, sourceSku, matchType)) { newLinkCount++; } } return(newLinkCount); }