gpt4 book ai didi

c# - 按 x 分组总和性能(VB.Net --> C#).net Core 2.0

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:04 25 4
gpt4 key购买 nike

我目前正在重做一些包含大量查询工作的 LOB 应用程序。

最初是一个 lightswitch vb.net 项目,但由于我想学习 C# 并将新版本基于当前技术,它现在是一个 ASP.Net Core 2.0 项目。

无论如何,我正在尝试将此查询 (VB.Net) 迁移到 C#:

      Return From x In _DB
Where x.Amount<> 0
Group By x.str1, x.str2 Into Sum(x.Amount)
Where Sum < 0
Select New Object With {...}

我把它翻译成这样:

     from x in _DB
where x.Amount!= 0
group x by new { x.str1, x.str2} into GROUP
where GROUP.Sum(s => s.Amount) < 0
select new Model()
{

...

}

输出是正确的,我在较小的查询中使用它,但在大约 1.000.000 行的表中,性能差异很大。 VB:3 秒,C#:45 秒。

C# 中的“group into sum”是否有更好的翻译,或者性能问题可能出在其他地方?

编辑:

所以我尝试使用 Linqpad 分析这两个版本,令我惊讶的是,它们的性能大致相同,并且都转换为相同的 SQL:

 DECLARE @p0 Decimal(21,20) = 0
DECLARE @p1 Decimal(21,20) = 0

SELECT [t1].[Artikelnr_] AS [Artikelnummer], [t1].[Lagerortcode], [t1].
[value2] AS [Bestand]
FROM (
SELECT SUM([t0].[Menge]) AS [value], SUM([t0].[Menge]) AS [value2], [t0].
[Artikelnr_], [t0].[Lagerortcode]
FROM [DB$Artikelposten] AS [t0]
WHERE [t0].[Menge] <> @p0
GROUP BY [t0].[Artikelnr_], [t0].[Lagerortcode]
) AS [t1]
WHERE [t1].[value] < @p1

这很奇怪。也许更多的是.net CORE 2.0 解释器的问题?出于显而易见的原因,我无法使用 vb.net (;

最佳答案

感谢大家给我指出正确的方向。

不幸的是,这与 EF Core 有一些关系,直到 2.0 GroupBy 才被翻译成 SQL...

参见 thisthis

它将在尚未发布的 2.1 中可用。

关于c# - 按 x 分组总和性能(VB.Net --> C#).net Core 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48992093/

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