0

highAmtCtrList は、更新する必要がある未処理のコントラクトのリストであり、comCtrList は、highAmtCtrList を更新する Dilution コントラクトのリストです。

したがって、highAmtCtrList の各コントラクトについて、comCtrList で一致するコントラクトが見つかった場合は、comCtrList から返された金額で更新します。

コードは機能します。それを linq に変更したいだけです。

何か案は。前もって。ルイ・マルティンス

foreach (Outstanding outCtr in highAmtCtrList)
{
    Dilution dilCtr = 
        comCtrList.FirstOrDefault(dil => dil.Contract == outCtr.Contract);
    if (dilCtr != null) outCtr.Amount += dilCtr.Amount;
}
4

2 に答える 2

1

コードは正常に見えます。これらすべてを1行で記述できますが、IMOは保守しにくいコードです。

outCtr.Join(comCtrList, 
    o => o.Contract, 
    i => i.Contract, 
    (o, i) => o.Amount += i.Amount);

編集:最初の一致のみを合計するには:

outCtr.ForEach(o => o.Amount += comCtrList
   .Where(i => i.Contract == o.Contract)
   .Select(i => i.Amount)
   .FirstOrDefault());
于 2012-08-26T12:30:56.560 に答える
1

これはどう?

foreach (Outstanding o in highAmtCtrList)
{
    o.Amount += comCtrList.Where(d => d.Contract == o.Contract)
                          .Select(d => d.Amount)
                          .FirstOrDefault();
}

別の方法を次に示します。

foreach (Outstanding o in highAmtCtrList)
{
    o.Amount += comCtrList.Where(d => d.Contract == o.Contract)
                          .Take(1)
                          .Sum(d => d.Amount);
}
于 2012-08-26T12:23:23.790 に答える