У меня есть класс "item":
public class Item
{
public int Id { get; set; }
public decimal Price { get; set; }
public override bool Equals(object obj)
{
if (obj is Item item)
return item.Id == Id;
return false;
}
// GetHashCode omitted...
}
И у меня есть 2 списка, которые мне нужно объединить:
var items1 = new List<Item>
{
new Item { Id = 1, Price = 10 },
new Item { Id = 2, Price = 10 },
new Item { Id = 3, Price = 10 },
};
var items2 = new List<Item>
{
new Item { Id = 1, Price = 10 },
new Item { Id = 2, Price = 8 },
new Item { Id = 4, Price = 10 },
};
Союз, который я получаю так:
var union = items1.Union(items2).ToList();
Но мне нужно также ограничить, чтобы предметы с самой низкой ценой находились в союзе. Так, например, в приведенных выше списках Item.ID = 2 из "items2" должен быть в объединении ... поэтому результатом должен быть список, состоящий из этих 4 элементов:
- Item {Id = 1, Price = 10}
- Item {Id = 2, Price = 8} // Не тот, у которого Price = 10
- Item {Id = 3, Price = 10}
- Item {Id = 4, Price = 10}
Есть ли элегантный способ сделать это в C # (желательно с использованием Linq)?