C# Linq Group by需要花费大量时间,而sql中的同一查询需要0.2秒

C# Linq Group by需要花费大量时间,而sql中的同一查询需要0.2秒,c#,mysql,linq,C#,Mysql,Linq,我正在尝试连接4个表,并将它们相应地分组,然后计算一个值 var query = from sd in sdddd join ei in eiii.Where(ei1 => ei1.bi == 110) on sd.sdi equals ei.sdi join pch in pchhhh.Where(bpch => bpch.bi == 110) on sd.sdi equals pch.sdi

我正在尝试连接4个表,并将它们相应地分组,然后计算一个值

var query = from sd in sdddd
                join ei in eiii.Where(ei1 => ei1.bi == 110) on sd.sdi equals ei.sdi
                join pch in pchhhh.Where(bpch =>  bpch.bi == 110) on  sd.sdi equals pch.sdi 
                join ass in baaaa.Where(pc => pc.bi == 110) on pch.bi equals ass.bi
            where ei.bi == 110
            group new { sd,ei,pch, ass} by new { sd.dis,sd.dn } into x
                select new bs
                {
                    val1 = x.key.dn,
                    val2 = x.key.dis,
                    val3 = x.key.sdi,
                    val4 = x.key.di,
                    val5 = x.Sum(a=>a.pch.ab == "A" ? (a.pch.ans * a.ass.prm) : (a.pch.sb == "B" ? (a.pch.ans * a.ass.pim) : 0))
                };
我发现的问题是按功能分组的。如果我删除groupby,它会很快返回数据,但使用groupby时会花费很多时间

select  sd.[sdi],sd.[dnum] as 'Dept #',sd.[desc],
format(sum(case when pch.[ab]='A' then pch.[ans]*ass.prm 
else pch.[ans]*.pim end),'N2')
FROM [database].[sdddd] as sd
JOIN [database].[eiii] as ei on ei.[sdi] = sd.[sdi]
join [database].[pchhh] as pch on pch.[sdi]=sd.[sdi]
join [database].[ass] as ass on ass.bi = pch.bi 
WHERE ei.bi=110
GROUP BY sd.[desc],sd.[dnum],sd.[sdi]
ORDER BY sd.[dnum]

工作正常的原始sql查询。我只是想转换这个查询,将三个不同的表连接在一起并将它们分组,然后转换成linq

欢迎使用StackOverflow!请查看,以确保您包含了帮助您回答此问题所需的所有信息。@tim我不确定此帖子还需要哪些其他数据。请让我知道需要什么样的数据。从你的帖子中很难看出你真正的问题是什么。此外,您还可以在Linq查询中包含您试图复制的实际SQL查询。您的
分组依据之后选择
有问题
val1
val2
val3
val4
应该取自
x
,对于前两个,肯定
x.Key.dis
x.Key.dn
,对于另外两个,我不知道mysql的柚子提供商无法(正确地)访问还没有实现groupby功能,可能是由于efcore源代码中的一些限制。启用敏感数据日志记录,您可能会注意到查询正在内存中执行。这意味着在执行groupby之前,会将大量不必要的数据拉入内存。