我有一个“项目”类:
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();
但是我还需要约束,即价格最低的物品在联合体内。因此,例如在上面的列表中,“ items2”中的Item.ID = 2必须在联合中...因此结果应为包含以下4个项目的列表:
在C#中是否有一种优雅的方法(最好使用Linq)?
答案 0 :(得分:3)
您可以尝试使用 groupby ,如下所示:
var result = items1.Union(items2).GroupBy(x => x.Id)
.Select(x => new Item
{
Id = x.Key,
Price = x.Min(i => i.Price)
});