【问题标题】:LINQ query to Group, Sort and SumProduct对 Group、Sort 和 SumProduct 的 LINQ 查询
【发布时间】:2015-01-28 09:06:22
【问题描述】:

如何创建LINQ查询来实现以下功能:

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

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

我开始在一个 LINQ 查询中进行分组,但被其他部分卡住了:

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

如何完成查询才能得到想要的结果?

【问题讨论】:

  • 什么是SourceDataItems
  • 源数据,作为自定义类的IEnumerable。

标签: .net vb.net linq


【解决方案1】:

假设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)

【讨论】:

  • 否则有效,但 SumProduct 计算错误。我需要在源数据项级别上进行乘法运算,例如对于 Item1 我需要:2334 x 23.2 + 2331 x 45.2 = 159 510。现在它计算为 (2334+2331)*(23.2+45.2) =319 086
  • 如果你再做一个编辑,我可以接受答案:i.Value + i.Maturity -> i.Value * i.Maturity
猜你喜欢
  • 2017-03-16
  • 2012-08-28
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
相关资源
最近更新 更多