在我的应用程序中使用此linq查询:
var r = from uev in UtilisateurEpisodeVus
group uev by uev.Episode.Saison.Serie into pgroup
let count = pgroup.Count()
orderby count descending
select new SerieVu() { nombreDeVus = count, Serie = pgroup.Key };
return r.ToList();
在LINQPad中使用与实体框架相同的连接使用大致相同的查询:
from uev in UtilisateurEpisodeVus
group uev by uev.Episode.Saison.Serie into pgroup
let count = pgroup.Count()
orderby count descending
select pgroup.Key
在我的申请中:
resultat.ToList()
大约需要45秒。
在LINQPad中需要191毫秒。
请问有什么问题?
答案 0 :(得分:3)
感谢您的帮助我使用Entity Framework Profiler试用版找到了解决方案。实际上我这样做了:
IEnumerable<UtilisateurEpisodeVu> listUtilisateurEpisodeVu = Query(uev => uev.userepivu_date > dateIlYaSeptJours);
var resultat =
from uev in listUtilisateurEpisodeVu
group uev by uev.Episode.Saison.Serie into pgroup
let count = pgroup.Count()
orderby count descending
select new SerieVu() { nombreDeVus = count, Serie = pgroup.Key };
通过做:
var resultat =
from uev in Query(uev => uev.userepivu_date > dateIlYaSeptJours)
group uev by uev.Episode.Saison.Serie into pgroup
let count = pgroup.Count()
orderby count descending
select new SerieVu() { nombreDeVus = count, Serie = pgroup.Key };
直接在我的linq查询中使用Query,性能很好......我不明白为什么。如果有人有任何想法,我会很高兴知道答案。再次感谢
答案 1 :(得分:2)
当你说
时IEnumerable<UtilisateurEpisodeVu> listUtilisateurEpisodeVu
from uev in listUtilisateurEpisodeVu
group uev
您正在对IEnumerable<T>
进行分组,该System.Linq.Enumerable.GroupBy
将变为from uev in Query(uev => uev.userepivu_date > dateIlYaSeptJours)
group uev
上的一个调用,该调用将加载整个表并在本地执行。
当你说
时IQueryable<T>
您正在对System.Linq.Queryable.GroupBy
进行分组,该IQueryable<UtilisateurEpisodeVu> listUtilisateurEpisodeVu
from uev in listUtilisateurEpisodeVu
group uev
将变为{{1}}上的呼叫,该呼叫将转换为sql并发送到数据库。
您可以通过更改变量的类型来获得相同的结果:
{{1}}