Vb.net 如何求前N的和

Vb.net 如何求前N的和,vb.net,linq,Vb.net,Linq,我有一个(ZZZ)列表,(其中ZZZ是一个具有成本和周属性的类)。我想得到列表中前N周的成本总和 到目前为止,我有以下内容,其中给出了所有ZZZ的总数 Imports System Imports System.Linq Imports System.Collections.Generic Public Module Module1 Public Sub Main() Dim MyZZZ As New List(Of ZZZ)

我有一个(ZZZ)列表,(其中ZZZ是一个具有成本和周属性的类)。我想得到列表中前N周的成本总和

到目前为止,我有以下内容,其中给出了所有ZZZ的总数

Imports System
Imports System.Linq
Imports System.Collections.Generic
                
Public Module Module1
    Public Sub Main()
        Dim MyZZZ As New List(Of ZZZ)
        Dim Total As Single
        Dim NumOfWeeksToSelect As Integer = 2
        
        MyZZZ.Add(New ZZZ With {.Cost = 1.1, .Week = 100})
        MyZZZ.Add(New ZZZ With {.Cost = 2.2, .Week = 100})
        MyZZZ.Add(New ZZZ With {.Cost = 3.3, .Week = 99})
        MyZZZ.Add(New ZZZ With {.Cost = 4.4, .Week = 99})
        MyZZZ.Add(New ZZZ With {.Cost = 5.5, .Week = 95})
        MyZZZ.Add(New ZZZ With {.Cost = 6.6, .Week = 95})
        MyZZZ.Add(New ZZZ With {.Cost = 7.7, .Week = 95})
        MyZZZ.Add(New ZZZ With {.Cost = 8.8, .Week = 90})
        MyZZZ.Add(New ZZZ With {.Cost = 9.9, .Week = 80})
        MyZZZ.Add(New ZZZ With {.Cost = 10.10, .Week = 70})
        
        Total = MyZZZ.Select(Function(T) T.Cost).Sum
                
        Console.WriteLine(Total)
    End Sub
    
    Private Class ZZZ
        Public Cost As Single
        Public Week As Integer
    End Class
End Module
如何更改行
Total=MyZZZ.Select(Function(T)T.Cost).Sum
,这样就不需要列表中的所有项目,只需要在所有项目中的前两周中有一周的项目

例如,如果NumOfWeeksToSelect=2,则它将对MyZZZ中的前4个条目求和(因为前两周分别为100和99)。如果它是3,那么它将把前7个加起来(因为前3周是100、99和95)

此外,我想知道实际选择了多少周。因此,如果NumOfWeeksToSelect是100,那么答案将是6,因为列表中实际上只有6个不同的星期

以上资料可在此处查阅:

此外,如果有什么不同,我需要在.Net Framework v4下运行此功能。

尝试以下操作:

Dim total=(来自MyZZZ中的obj
按对象排序。按周递减
按周分组=目标周
分成几周=一组
选择周).Take(numofewekstoselect.Sum(函数(g)MyZZZ.Where(函数(obj)obj.week=g).选择(函数(obj)obj.Cost.Sum())
它的作用是:

  • 按周对对象进行分组
  • 在前N组中排名第一
  • 合计前N组的成本
  • 把数字3加起来

  • 示例:

    非常好,谢谢。我花了一些时间来完全解析发生了什么,但我想我已经明白了。:)