0

以下のlinqクエリを最適化することはできますか。データベースに1回だけヒットする必要があります。

List<LearningItem> items = this.learningitemRepository.GetAll().ToList();

var model = new List<StatementViewerModel>();
foreach (var statement in subjects)
{
    var mi = new StatementViewerModel();
    mi.UserName = statement.UserName;
    mi.SubjectName = statement.Name;
    **int nofItems = items.Where(x => x.SubjectId == statement.SubjectId).Count();**
    double ratio = (double)statement.AttendedItems / (double)nofItems;
    int subjectprogress = (int)(ratio * 100);
    mi.Progress = subjectprogress;
    model.Add(mi);
}
4

1 に答える 1

1

GetAll()あなたが投稿したものから、あなたのデータベースはあなたのメソッドを介してのみアクセスされるべきlearmingitemRepositoryです. したがって、データベースに複数回クエリを実行することが心配な場合は、GetAll()関数を探す必要があります (例が、それ自体が繰り返し呼び出される関数に含まれていないと仮定します)。

コードの残りの部分は、コレクションを繰り返し処理し、subjectsコレクションにオブジェクトを追加していますmodelforeachデータベースにアクセスしているループには何もないようです。

于 2013-10-09T11:59:00.070 に答える