IEnumerable を取り、グループ化、順序付けを行い、上位 N 個の要素を取り、それらの要素のリストを返す関数を作成しています。後でもっと多くのことを行う可能性があります。そのため、LINQ を直接使用するだけでなく、関数にしたいと考えています。
コレクションのグループ化と並べ替えに使用する T 型のメンバーを指定するために、匿名デリゲートに依存しています。
public IEnumerable<T> GetList(IEnumerable<T> collection, Func<T, object> groupBy, Func<T, object> orderBy, int howMany)
{
var group = collection
.GroupBy(groupBy)
.Select(x => x.OrderBy(orderBy).Take(howMany))
.Aggregate((l1, l2) => l1.Concat(l2));
return group.ToList();
}
そして、次のように使用します:
new CollectionGroupPicker<NumericDomainObject>().GetList(list, x => x.GroupableField, x => x.OrderableField, 2).ToList();
私の質問は - TI がグループ化と並べ替えに使用するタイプのメンバーを渡すためのより良い方法はありますか? ここではオブジェクトを使用していますが、より良い方法はありますか?