我正在创建一个函数,该函数将采用一些 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 类型的哪个成员将用于分组和排序?我在这里使用对象,但有更好的方法吗?