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クエリでクエリを直接使用すると、パフォーマンスが向上します...理由がわかりません。誰かが何か考えを持っているなら、私は答えを知ってうれしいです. 再度、感謝します

于 2013-01-11T18:22:27.970 に答える
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>と、それがonの呼び出しになりSystem.Linq.Queryable.GroupBy、SQLに変換されてデータベースに送信されます。

変数のタイプを変更しても、同じ結果を得ることができます。

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