如何重构LINQ
本文关键字:LINQ 重构 何重构 | 更新日期: 2023-09-27 17:51:19
如何重构这段代码?
是否有可能使aktuelKurs和kursagen for在同一行?
编辑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;
}
}
这不是很有效。首先,分别查询每个单独的和,其次,在每次迭代中计算在前一次迭代中也计算过的和。
您可以通过在一个分组查询中查询所有所需的总和来提高效率:
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()