没想到可以解决很多问题的查询

问题描述

|| 我遇到了这种复杂的情况。 使用\“ Model first \”创建的EF,这是我的EF实体: -课程讲师多对多关系-   课程讲师 ------------ -------------------列IS_PROFESOR是bool   讲师的+ ID + ID值:   + NAME + FirsTNAME是:课程教授 ----------- + LASTNAME否:课程不变 -讲师+ IS_PROFESOR ----------- -------------------                       -课程                   -------------------   现在,-LECTURERS和-COURSES是导航属性。 从数据库中的此表中,我需要查询数据并将它们放入某些模型中,这样我就可以跟踪课程索引视图 -------------------------------------------------- -------------------------------     课程教授|助手|动作 -------------------------------------------------- -------------------------------     课程1 |课程教授|助理1 |编辑更新删除                | |助手2 |编辑更新删除 -------------------------------------------------- -------------------------------     课程2 |课程教授|助理1 |编辑更新删除 -------------------------------------------------- -------------------------------     课程3 |课程教授|助理1 |编辑更新删除                | |助手2 |编辑更新删除                | |助手3 |编辑更新删除 -------------------------------------------------- -------------------------------    如您所见,我需要以这种方式填充一些新视图模型的查询,以使其能够将“课程教授”与“课程助手”列表区分开。 模型将是(对吗?):
public class CourseView
{
public int CourseID { get; set; } public string CourseName { get; set; }
public string ProfessorName { get; set; }
public List AssistantNames { get; set; } // Or it should be List of Assistants
}

我用自己的技能无法想出解决这个问题的合理方法,任何帮助,参考或建议对我来说都无济于事,每秒钟看一次就很有意义。     

解决方法

        您可能要重做EF实体。现在,您说的是每门课程都有多位讲师,讲师是教授或助理。但是您的课程索引视图似乎表明每门课程都应该有一位教授和多位助手。您还表示讲师只能是教授或助理。我首先要确保一个课程的教授不能成为另一个课程的助手。如果是这种情况,那么我将为教授和助手创建一个单独的表(或实体)。使每门课程有一名教授和多名助手。另一方面,如果教授可以担任助理,那么您需要从讲师中删除教授的任职,并通过让每门课程都有一名讲师(即教授)和一组讲师作为助理来将其与课程建立联系。 但是,如果您要继续当前的设置,则应该可以使用以下内容填充所需的视图
var courseViews = from c in db.Courses
                  select new CourseView()
                  {
                      CourseID = c.ID,ProfessorName = (from l in c.Leturers 
                                       where l.Is_Professor 
                                       select l.Name).FirstOrDefault(),AssistantNames = (from l in c.Leturers 
                                        where !l.Is_Professor 
                                        select l.Name).ToList()
                  };