【发布时间】:2020-10-02 07:26:02
【问题描述】:
目前,我有以下代码将“项目”分组,它是基于多个属性(prop1 和 prop2)的 List(Of CLass1)。
Dim matchedMethods = items.GroupBy(Function(x) New With_
{Key x.prop1, Key x.prop2, Key x.prop3}).ToList()
这适用于对已知数量的属性进行分组,但如果我希望它按“n 个属性”排序(prop1,然后是 prop2,然后是 prop3,然后是 propN...)。
【问题讨论】:
-
你说 "grouping 已知数量的属性但是如果我想要它 sorted" - 用这个整个问题,你问的是分组还是排序?
-
分组。具有相同 prop1=x、2=y、3=z 的项目应组合在一起,具有相同 prop1=x1、prop2=y2、prop3=z2 的项目应组合在一起,等等。如果这有意义的话
-
AFAIK 这就是它的工作原理:当 LINQ 为您进行分组时,您指定一个键,然后从中获得一系列 IGrouping,这有点像
Dictionary(Of keyType, List(Of inputValueType));每个 IGrouping 都有一个 Key,它本身就是一个分组值的列表。如果你有 5 个 Person 实例,三个叫 John,他是 27 岁,两个叫 Paul,年龄 38。你 GroupBy 名字和年龄你得到 2 个 IGrouping,一个有 John,27 的 Key 和 3 个 Person 对象(都是 John,27 ) 而另一个 IGrouping 的键是 Paul,38 并且是两个 Person 的枚举,这两个 Person 都是 Paul 和 38 -
我试图让用户选择 GroupBy,所以不仅仅是“姓名”和“年龄”,还可以是“dob”或更多。我的问题(如果之前不清楚,请道歉)是我如何使用不同数量的分组。因此,与其像我在上面的代码中那样显式传递 3 个属性,不如我如何传递 n 个属性。用户可能只想按 prop1 或 prop1,2,3,4,5 或 prop3,2 等进行分组。