0

任何人都可以优化以下 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);
}
4

1 回答 1

1

从您发布的内容来看,您的数据库应该只能通过GetAll()您的learmingitemRepository. 因此,如果您担心要多次查询数据库,GetAll()那么您应该查看该函数(假设您的示例不在一个被重复调用的函数中)。

您的其余代码将遍历您的subjects集合并将对象添加到您的model集合中。foreach循环中似乎没有任何东西正在访问您的数据库。

于 2013-10-09T11:59:00.070 回答