Я пытаюсь сравнить два списка объектов и создать из них новый список.
У меня есть класс с именем Item.
public class Item
{
public string ItemNumber;
public string OptionNumber;
public int Count;
}
У меня есть два списка элементов -processItems и currentItems.
List<Item> processedItems = new List<Item>();
List<Item> currentItems = new List<Item>();
Мне нужен список обработанных элементов.
Однако, если ItemNumber и OptionNumber существуют в currentItems, я хочу, чтобы свойство Count было суммой двух значений (значение в processingItems и currentItems).
Пример ожидаемых и фактических значений.
processedItems.Add(new Item() { ItemNumber = "123456", OptionNumber = "123", Count = 1 });
processedItems.Add(new Item() { ItemNumber = "123456", OptionNumber = "126", Count = 2 });
processedItems.Add(new Item() { ItemNumber = "112233", OptionNumber = "111", Count = 1 });
processedItems.Add(new Item() { ItemNumber = "112244", OptionNumber = "222", Count = 4 });
currentItems.Add(new Item() { ItemNumber = "123456", OptionNumber = "123", Count = 1 });
currentItems.Add(new Item() { ItemNumber = "123456", OptionNumber = "126", Count = 2 });
currentItems.Add(new Item() { ItemNumber = "998877", OptionNumber = "111", Count = 1 });
currentItems.Add(new Item() { ItemNumber = "112244", OptionNumber = "222", Count = 0 });
Из приведенного выше примера я пытаюсь получить следующий вывод:
List<Item> output = new List<Item>();
output.Add(new Item() { ItemNumber = "123456", OptionNumber = "123", Count = 2 });
output.Add(new Item() { ItemNumber = "123456", OptionNumber = "126", Count = 4 });
output.Add(new Item() { ItemNumber = "112233", OptionNumber = "111", Count = 1 });
output.Add(new Item() { ItemNumber = "112244", OptionNumber = "222", Count = 4 });
Нужно ли мне использовать Concat? У меня сейчас что-то вроде этого
var output = processedItems.Select(x => new Item
{
ItemNumber = x.ItemNumber,
OptionValue = x.OptionValue,
Count = x.Count + (currentItems.FirstOrDefault(y => y.ItemNumber == x.ItemNumber && y.OptionValue == x.OptionValue).Count)
}).Concat(currentItems
.Where(x => processedItems.Any(y => y.ItemNumber == x.ItemNumber && y.OptionValue == x.OptionValue)))
.Select(x => new Item
{
ItemNumber = x.ItemNumber,
OptionValue = x.OptionValue,
Count = x.Count
})
.ToList();