2016-10-18 25 views
1

linqグループには何らかの方法がありますか?Id、Order降順で各グループの上位5を選択しますか?今私はいくつかのコードを以下に示しましたが、私は.Take(5)を使用しました。グループ化にかかわらず、明らかにトップ5を選択します。Linq - IDでグループ化し、各グループの上位5を選択します。

Items = list.GroupBy(x => x.Id) 
      .Select(x => x.OrderByDescending(y => y.Value)) 
      .Select(y => new Home.SubModels.Item { 
       Name= y.FirstOrDefault().Name, 
       Value = y.FirstOrDefault().Value, 
       Id = y.FirstOrDefault().Id 
      }) 

答えて

1

あなたはほぼあります。 Select文でTakeを使用します。

var items = list.GroupBy(x => x.Id) 
       //For each IGrouping - order nested items and take 5 of them   
       .Select(x => x.OrderByDescending(y => y.Value).Take(5)) 

これはIEnumerable<IEnumerable<T>>を返します。それをフラットにしたい場合は、SelectSelectManyに置き換えてください。

+0

私はあなたの最初の答えをselectmanyで使いました。完全に動作します。お手伝いありがとう! –

+0

@BadDub - あなたは大歓迎です:) –

+1

私は時間が下がるのを待っていました。 –

関連する問題