首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于显示集合的SQL视图,并按员工列出任何相关记录。

用于显示集合的SQL视图,并按员工列出任何相关记录。
EN

Stack Overflow用户
提问于 2015-06-01 17:29:54
回答 1查看 33关注 0票数 0

我正在编写一个培训管理系统,需要在一个给定团队中的每个员工的表中显示所有培训课程类型的列表。

对于每个培训课程,我想查看一个预订表,并获得该员工和课程类型组合的最新预订。即使没有预订,我仍然想为每个员工撤回每种课程类型。(尽管预订字段为空)。预订连接到booking.empID到employee.id上的雇员,以及booking.courseId到courseType.id上课程类型的预订链接。

我希望结果按员工分组。

通过在MVC中创建一个视图模型,我成功地做到了这一点,但即使在我的测试数据中,有8名员工,10种课程类型,以及满满的预订,我看到的加载时间为6-7秒。我认为我的观点模型效率很低。

下面是我在VM中使用的类:

代码语言:javascript
复制
public class TeamMemberTraining()
{
   public int UserId { get; set; }
   public string UserName { get; set; }
   public IEnumerable<trainingSet> Trainingset { get; set; }
}

public class trainingSet()
{
   public int templateId { get; set; }
   public string templateName { get; set; }      
   public TrainingCourseBooking LastBooking { get; set; }
   public TrainingCourseBooking FutureBooking { get; set; }
}

我的数据集是以以下方式在我的存储库中构建的:

代码语言:javascript
复制
 public List<TeamMemberTraining> GetPersonalHistory(int id)
    {
        var teamMatrix = new List<TeamMemberTraining>();
        var teamMembers = GetProfileIdsByTeam(teamID); //Int list of employee id's
        foreach (var teamMemberin teamMembers)
        {
            var empMatrix = new TeamMemberTraining();
            var empRecord = _entities.employees.FirstOrDefault(x => x.Id == emp);
            empMatrix.trainingSet = GetPersonalHistory(emp);
            empMatrix.UserId = empRecord.Id;
            empMatrix.UserName = empRecord.forename + " " + empRecord.surname;
            teamMatrix.Add(empMatrix);
        }
}


 public IEnumerable<trainingSet> GetPersonalHistory(int id)
    {
        var matrix = new List<trainingSet>();
        var courses = (from a in _entities.courseTypes
            select a).ToList();
        var employee = (from a in _entities.employees
            where a.Id == id
            select a).FirstOrDefault();
        foreach (var course in courses)
        {
            var matrixItem = new trainingSet
            {
                templateId = course.Id,
                templateName = course.description,
             };
            var history = (from a in _entities.TrainingCourseBookings
                where a.templateId == courseType.Id && a.employeeId == id && a.certificateIssued
                orderby a.Id descending
                select a).FirstOrDefault();
            if (history != null)
            {
                matrixItem.LastBooking = history;
            }

            var future = (from a in _entities.TrainingCourseBookings
                where a.templateId == courseType.Id && a.employeeId == id && a.TrainingCourse.courseDate >= DateTime.Now
                orderby a.Id descending
                select a).FirstOrDefault();
            if (future != null)
            {
                matrixItem.FutureBooking = future;
            }

            matrix.Add(matrixItem);
       }

        return matrix;
    }

这给了我所有课程的列表,按用户列出,如果有的话会显示预订情况。它也给了我一整负荷的缓慢加载时间与所有嵌套。

有人能给我提供更好的方法来实现这一点吗?

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-01 18:27:05

试试这样的东西。

代码语言:javascript
复制
   IEnumerable<TrainingSet> GetPersonalHistory(int id)
   {
        var employee = _entities.employees.FirstOrDefault(e => e.Id == id);
        var results =  
            from course in _entities.courseTypes
            let applicableBookings = 
                from booking in _entities.TrainingCourseBookings
                where booking.employeeOd == id
                where booking.templateId == course.courseType.Id 
                orderby booking.Id descending
                select booking
            let history = applicableBookings.FirstOrDefault(b => b.certificateIssued)
            let future = applicableBookings.FirstOrDefault(b => b.TrainingCourse.courseData >= DateTime.Now)
            select new TrainingSet 
            {
               TemplateId = course.Id,
               TemplateName = course.description,   
               LastBooking = history,
               FutureBooking = future
            };
        return results.ToList();
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30579617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档