对 Group、Sort 和 SumProduct 的 LINQ 查询

LINQ query to Group, Sort and SumProduct

如何创建 LINQ 查询以实现以下目的:

  1. 名称 属性
  2. 对源数据项进行分组
  3. 属性 对结果 Groups 进行排序,最大的一组在顶部
  4. Select 将项目分组到一个名为 MyNewClass 的新 class 中(如下图右侧所示)
  5. 计算每个 GroupValue x MaturitySumProduct,并将结果设置为 MaturitySumProduct 属性 在 MyNewClass.

下面是来自 LINQ 查询的源数据和所需结果结构的示例。

我从在 LINQ 查询中分组开始,但遇到了其余问题:

Dim query = From i In SourceDataItems
            Group By Name = i.Name
            Into MyNewClass = Group

如何完成查询以获得想要的结果?

假定 MyNewClass 中的适当构造函数:

Dim query = From i In SourceDataItems
            Group By Name = i.Name Into NameGroup = Group
            Let SumArea = NameGroup.Sum(Function(i) i.Area)
            Let SumValue = NameGroup.Sum(Function(i) i.Value)
            Let SumMaturity = NameGroup.Sum(Function(i) i.Maturity)
            Let MaturitySumProduct =  NameGroup.Sum(Function(i) i.Value * i.Maturity)
            Order By SumValue Descending
            Select New MyNewClass(Name, SumArea, SumValue, MaturitySumProduct)