数据聚合

Mic*_*ker 1 c# aggregation

在我的代码中,我创建了List<>以下类:

public class Calculations
{
        public int Year { get; set; }
        public double Payment { get; set; }
        public double AnnualInterest { get; set; }
        public double AnnualPrincipalSplit { get; set; }
        public double NLVBalance { get; set; }
        public double apportionedValue { get; set; }
        public double OpenMarketValue { get; set; }
        public double NotionalLoan { get; set; }
        public double ResidencyFee { get; set; }
        public double BalanceOfShare { get; set; }
        public double TotalShareOwnedOutright { get; set; }
        public double TotalEquity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

该列表包含代表投资期限的数据(例如,超过30年,列表中将有30个项目)

我有一个名为变量的变量globalReviewPeriod,它是一个整数,用于定义何时汇总列表中的数据(例如,如果globalReviewPeriod为5,投资期限为30年,则需要数据将在5年,10年,15年,20年,25年和30年汇总.

聚合本身非常简单,它只是类中包含的数据的累积值.

然而,考虑到我上面定义的逻辑(即在审查期间),我正在努力解决如何汇总数据的逻辑.

任何指针都会感激不尽.

Mar*_*ers 6

使用过载Where允许您根据索引进行过滤:

var result = listCalculations
    .Where((x, index) => index % globalReviewPeriod == 0)
    .Sum(...); // Put some aggregation here.
Run Code Online (Sandbox Code Playgroud)

从文档中,lambda函数使用如下:

谓语

键入:System.Func

用于测试条件的每个源元素的函数; 函数的第二个参数表示源元素的索引.

请注意,上面的代码将始终包含第一个项目,因为它具有索引0,可以被每个数字整除.您可能希望使用(index + 1)而不是index如果您想使用基于1的索引,其中第一个元素具有索引1.

var result = listCalculations
    .Where((x, index) => (index + 1) % globalReviewPeriod == 0)
    .Sum(...); // Put some aggregation here.
Run Code Online (Sandbox Code Playgroud)