如何重构LINQ

时间:2015-05-30 10:47:36

标签: c# linq

如何重构此代码?

是否可以将aktuelKurs og kursFagenFor放在同一行?

编辑2

  if (aktiekurser != null)
  {
    int idDato = aktiekurser.Last().IdDato;

    for (int i = 0; i < antalDage; i++)
    {
      aktuelKurs = (from a in aktiekurser
                    where a.IdDato == idDato - i
                    select a.Lukkekurs
                    ).Sum();

      kursDagenFor = (from a in aktiekurser
                    where a.IdDato == idDato - (i + 1)
                    select a.Lukkekurs
                    ).Sum();

      gnsOp += aktuelKurs > kursDagenFor ? aktuelKurs :0m;
    }
  }

1 个答案:

答案 0 :(得分:1)

效率不高。首先,您分别查询每个单独的和,然后,在每次迭代中,您计算​​一个也在上一次迭代中计算的总和。

通过在一个分组查询中查询所需的总和,可以提高效率:

var aktuelKurs = from a in aktiekurser
                 where a.IdDato >= idDato - 1 + antalDage
                 group a by a.IdDato into grp
                 select grp.Sum(x => x.Lukkekurs);

现在您有一个小数列表,您必须根据您的规则确定元素是否大于其前任和Sum结果:

var gnsOp = aktuelKurs.Zip(aktuelKurs.Skip(1), 
                 (prev,act) => act > prev ? act :0m).Sum()