2017-12-13 10 views
0

それぞれのカテゴリと価格に関連付けられたアイテムのリストがあります。私は最初に同じカテゴリのアイテムをチェックし、次にどちらが安価であるかチェックし、より高価なアイテムをリストから削除するlinqクエリを作成する方法を知りたがっています。リストから同じプロパティを持つアイテムを検索し、2つのアイテムの安価なものを選んでください

+0

質問は...? –

答えて

2
items = items.GroupBy(x => x.category) 
    .Select(x => new Item(x.Key, x.Select(y => y.price).Min())) 
    .ToList(); 
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(); 
} 
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(); 
関連する問題