代码之家  ›  专栏  ›  技术社区  ›  Werner

列出依赖/选择属性值的联合

  •  0
  • Werner  · 技术社区  · 6 年前

    我有一个班级“项目”:

        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...
        }
    

    我有两个列表需要合并:

            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个项的列表:

    • 项目ID=1,价格=10
    • item id=2,price=8//不是price=10的
    • 项目ID=3,价格=10
    • 项目ID=4,价格=10

    是否有一种优雅的方法可以在C(最好使用LINQ)中实现这一点?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Fredy Adriano Jimenez Martinez    6 年前

    您可以尝试使用 子句 ,如下:

    var result = items1.Union(items2).GroupBy(x => x.Id)
                     .Select(x => new Item
                     {
                         Id = x.Key,
                         Price = x.Min(i => i.Price)
                     });