2013-10-09 1 views
0

Может ли любой PLZ оптимизировать нижестоящий запрос linq. Он должен ударить по базе данных только один раз.Сколько раз запрос попадет в базу данных?

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); 
} 
+0

В чем проблема? Конечно, это только попадает в БД один раз в текущем состоянии? – Paddy

+0

Спасибо за комментарии. У меня есть сомнения, это вопрос, на котором я задал вопрос. – karthik

+0

Если вы сомневаетесь в этом, включите профилировщик в своей базе данных и посмотрите, что отправлено ... – Paddy

ответ

1

Из того, что вы выложили, ваша база данных должна быть доступна только через GetAll() метод вашего learmingitemRepository. Поэтому, если вы беспокоитесь о том, что вы запрашиваете базу данных несколько раз, функция GetAll() - это то, где вы должны смотреть (предполагая, что ваш пример не находится в функции, которая неоднократно называется сама).

Остальная часть вашего кода выполняет итерацию по вашей коллекции subjects и добавлению объектов в вашу коллекцию model. Кажется, что ничего в цикле foreach, который обращается к вашей базе данных.

+0

Спасибо большое ........... – karthik

Смежные вопросы