0

我有这段代码,其中 highAmtCtrList 是必须更新的未完成合同列表,comCtrList 是我更新 highAmtCtrList 的稀释合同列表。

因此,对于 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

这个怎么样?

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 回答
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 回答