是否有一个很好的方法来执行Linq GroupBy
,其中分组键是在运行时确定的?例如我希望从用户选择的字段列表构建分组键 - 你能这样做吗?我知道如果我将所有内容转换为字符串表,我可以轻松地完成它,但我想知道是否有一种优雅或聪明的方法来实现这一点 .
class Item
{
public int A, B;
public DateTime D;
public double X, Y, Z;
}
我有一个名为 data
的 List<Item>
. 我想做的事情就是检索由 A
分组的 X
的总和,或 X
, Y
和 Z
的总和,按 A
和 B
分组 . 但是进入分组的哪些字段应该能够以某种方式在运行时指定 .
2 回答
获取Dynamic LINQ代码并使用其中的扩展名,该扩展名允许您使用字符串指定keySelector .
如果要返回按键分组的整个对象,您可能还需要考虑添加自己的扩展 .
您只需在运行时构造一个Func <Item,TKey>:
用法:
如果在编译时不知道属性的类型,它会稍微(但不是很多)变得更难 .