【问题标题】:Data Aggregation数据聚合
【发布时间】:2012-06-25 12:12:49
【问题描述】:

在我的代码中,我正在创建以下类的 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 年汇总数据。

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

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

任何指点将不胜感激。

【问题讨论】:

    标签: c# aggregation


    【解决方案1】:

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

    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.
    

    【讨论】:

    • 在这种情况下,x 和 i 代表 Mark 什么?
    猜你喜欢
    • 2018-03-04
    • 2021-08-16
    • 2020-10-05
    • 2018-09-23
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多