从列表中查找具有相同属性的项目,然后选择两个项目中较便宜的项目

时间:2017-12-13 16:46:32

标签: linq query-expressions

我有一个项目列表,每个项目都有与之关联的类别和价格。我想知道如何创建一个linq查询,首先检查具有相同类别的项目,然后检查哪两个更便宜并从列表中删除更昂贵的项目?

3 个答案:

答案 0 :(得分:2)

items = items.GroupBy(x => x.category )
    .Select(x => new Item(x.Key, x.Select(y => y.price ).Min()))
    .ToList();

答案 1 :(得分:1)

你可以这样做。

foreach (var item in items.GroupBy(s => s.Category))
{
  var cheaper = item.Min(x => x.Price);
  //you can add it to a list of cheaper items
}

抱歉,我跳过删除的东西。您可以使用max遵循相同的逻辑,然后迭代整个结果,只获得与该价格不匹配的结果。您可以将所有内容放在同一个foreach语句中。仅出于教学目的,这就是为什么我把它放到一个不同的foreach。

foreach (var item in items.GroupBy(s => s.Category))
{
  var expensive = item.Max(x => x.Price);
  var listWithoutMax = item.Select(x => x.Price != expensive.Price).ToList();
}

答案 2 :(得分:1)

你可以试试这个。

        class Item
        {
            public string Category { get; set; }
            public int Price { get; set; }
        }
        var prods = new List<Item>
        {
            new Item { Category = "A", Price = 100},
            new Item { Category = "A", Price = 101},
            new Item { Category = "B", Price = 200},
            new Item { Category = "B", Price = 201},
        };

        var data = prods
            .GroupBy(prod => prod.Category)
            .Select(p => new Item { Category = p.Key, Price = p.Min(x => x.Price) })
            .ToList();