1

在我的代码中,我正在创建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; }
}

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

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

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

但是,鉴于我在上面定义的逻辑(即在审查期间),我正在为如何聚合数据的逻辑而苦苦挣扎。

任何指点将不胜感激。

4

1 回答 1

6

使用Wherethat 的重载允许您根据索引进行过滤:

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

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

谓词

类型:System.Func

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

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

var result = listCalculations
    .Where((x, index) => (index + 1) % globalReviewPeriod == 0)
    .Sum(...); // Put some aggregation here.
于 2012-06-23T11:11:04.360 回答