0

在我的应用程序中使用这个 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 中,使用与 Entity Framework 相同的连接使用大致相同的查询:

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 毫秒。

请问是什么问题?

4

2 回答 2

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 性能很棒......我不明白为什么。如果有人有任何想法,我会很高兴知道答案。再次感谢

于 2013-01-11T18:22:27.970 回答
2

当你说

IEnumerable<UtilisateurEpisodeVu>   listUtilisateurEpisodeVu
from uev in listUtilisateurEpisodeVu
group uev

您正在对一个 进行分组IEnumerable<T>,这会变成一个调用 on System.Linq.Enumerable.GroupBy,它会加载整个表并在本地执行。


当你说

from uev in Query(uev => uev.userepivu_date > dateIlYaSeptJours)
group uev

您正在对一个 进行分组IQueryable<T>,这会变成一个调用 on System.Linq.Queryable.GroupBy,该调用被翻译成 sql 并发送到数据库。

您可以通过更改变量的类型来获得相同的结果:

IQueryable<UtilisateurEpisodeVu>   listUtilisateurEpisodeVu
from uev in listUtilisateurEpisodeVu
group uev
于 2013-01-11T19:23:09.773 回答