如何重构此代码?
是否可以将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;
}
}
答案 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()