1

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 がグループ化と並べ替えに使用するタイプのメンバーを渡すためのより良い方法はありますか? ここではオブジェクトを使用していますが、より良い方法はありますか?

4

2 に答える 2