gpt4 book ai didi

c# - 如何使用 LinQ 提高性能

转载 作者:太空宇宙 更新时间:2023-11-03 17:21:44 29 4
gpt4 key购买 nike

我有这个 LinQ:

var IPI = item.INV_TAXES.Where(t => t.TAXTYPES.TAXNAME == "IPI")
.Select(t => new {TOT_AMT = t.TAXVALUE, t.TAXFACTOR, t.TAXBASE})
.First();

然后在代码中我调用了下一行大约 10 次:

PerformSomeCalculation(IPI.TOT_AMT);
PerformAnotherStuff(IPI.TOT_AMT,IPI.TAXVALUE);
PerformSomethingElse(IPI.TAXBASE);

我想知道是每次我调用 IPI 的每个成员时,LinQ 都会执行还是在我第一次分配它时执行?

首先将 IPI 成员分配给变量是否更好?

decimal IPI_TOT_AMT = IPI.TOT_AMT,
IPI_TAXVALUE = IPI.TAXVALUE,
IPI_TAXBASE = IPI.TAXBASE;

然后使用它们。

谢谢大家的建议。

最佳答案

首先,停止在您的代码中大喊大叫。

你的担心是对的。每次访问查询时都会新鲜执行,因为结果可能会改变。但是 First 的结果不是查询,而是一个值。

也就是说,如果您这样做:

var query = whatever.Where(whatever).Select(whatever);
Console.WriteLine(query.First());
Console.WriteLine(query.First());

然后查询由第一行创建,第二行执行,第三行再次执行。查询不知道您第二次调用 First 时第一个结果是否不同,因此它再次运行查询。

相比之下,如果你这样做:

var query = whatever.Where(whatever).Select(whatever);
var first = query.First();
Console.WriteLine(first);
Console.WriteLine(first);

然后第一行创建查询,第二行执行查询并存储结果,第三行和第四行报告存储的结果。

关于c# - 如何使用 LinQ 提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10097240/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com