我正在尝试构建一个通用的GroupBy
方法,我猜它应该是这样的
var result = GenericGroupBy<List<DTO>>(dataList, g=>g.Id);
public object GenericGroupBy<T>(object data, Func<T, bool> groupByExpression)
{
return ((List<T>)data).GroupBy(groupByExpression);
}
但我无法使其发挥作用。
如何传递g=>g.Id
等表达式?
答案 0 :(得分:1)
目前存在两个问题:
Func<T, bool>
我怀疑g => g.Id
失败,因为您的Id
属性不是bool
List<DTO>
时,你当前正在指定DTO
作为类型参数。鉴于您的意见,这将有效:
var result = GenericGroupBy<DTO>(dataList, g => g.Id);
public object GenericGroupBy<T>(object data, Func<T, int> groupByExpression)
{
return ((List<T>)data).GroupBy(groupByExpression);
}
...但除非您始终想要按int
进行分组,否则我会更加一般:
var result = GenericGroupBy<DTO, int>(dataList, g => g.Id);
public object GenericGroupBy<TElement, TKey>
(object data, Func<TElement, TKey> groupByExpression)
{
return ((IEnumerable<TElement>)data).GroupBy(groupByExpression);
}
请注意我如何将演员阵容从List<T>
更改为IEnumerable<T>
- 您 需要成为List<T>
那么为什么要这样做?