我有这段代码,其中highAmtCtrList是必须更新的未完成合约的列表,comCtrList是我更新highAmtCtrList的稀释合约列表。
因此,对于highAmtCtrList中的每个conctract,如果我在comCtrList中找到匹配的契约,我将使用从comCtrList返回的数量更新它。
代码有效,只是我想把它改成linq。
任何想法。 请提前。 瑞·马丁斯
foreach (Outstanding outCtr in highAmtCtrList)
{
Dilution dilCtr =
comCtrList.FirstOrDefault(dil => dil.Contract == outCtr.Contract);
if (dilCtr != null) outCtr.Amount += dilCtr.Amount;
}
答案 0 :(得分: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);
}
答案 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());