我有一些代码,我想转向linq

时间:2012-08-26 12:14:46

标签: linq foreach

我有这段代码,其中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;
}

2 个答案:

答案 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());