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

Whereインデックスに基づいてフィルタリングできるようにするオーバーロードを使用します。

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

ドキュメントから、ラムダ関数は次のように使用されます。

述語

タイプ: System.Func

各ソース要素の条件をテストする関数。関数の 2 番目のパラメーターは、ソース要素のインデックスを表します。

上記のコードには常に最初の項目が含まれることに注意してください。これは、すべての数値で割り切れるインデックス 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 に答える