C# Linq Group by需要花费大量时间,而sql中的同一查询需要0.2秒
我正在尝试连接4个表,并将它们相应地分组,然后计算一个值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
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之前,会将大量不必要的数据拉入内存。