Speed up search for existing item values

Replace the O(n²)  array .First scan with a dictionary lookup
This commit is contained in:
Marc Brooks
2026-08-04 05:32:47 -05:00
parent 234a49903b
commit 812c819162
@@ -314,9 +314,11 @@ public class ItemPersistenceService : IItemPersistenceService
}).ToArray();
context.ItemValues.AddRange(missingItemValues);
var itemValuesStore = existingValues.Concat(missingItemValues).ToArray();
var itemValuesStore = existingValues
.Concat(missingItemValues)
.ToDictionary(e => (e.Type, e.Value));
var valueMap = itemValueMaps
.Select(f => (f.Item, Values: f.Values.Select(e => itemValuesStore.First(g => g.Value == e.Value && g.Type == e.MagicNumber)).DistinctBy(e => e.ItemValueId).ToArray()))
.Select(f => (f.Item, Values: f.Values.Select(e => itemValuesStore[(e.MagicNumber, e.Value)]).DistinctBy(e => e.ItemValueId).ToArray()))
.ToArray();
var mappedValues = context.ItemValuesMap.Where(e => ids.Contains(e.ItemId)).ToList();