使用SQL语法在LINQ中执行连接

使用SQL语法在LINQ中执行连接,linq,entity-framework,join,asp.net-mvc-5,Linq,Entity Framework,Join,Asp.net Mvc 5,我目前正在学习实体框架,并试图构建一个注册系统。现在,我正试图使用一个名为“EnrollmentModel”的关联表来显示学生注册的课程。通常,如果这是SQL,我的查询将类似于: SELECT * FROM EnrollmentModel as e, StudentModel as s, CourseModel as c WHERE s.ID = e.StudentID AND e.CourseID = c.ID 那么有没有一种方法可以用LINQ来实现呢?或者我必须将语法从SQL“翻译”到L

我目前正在学习实体框架,并试图构建一个注册系统。现在,我正试图使用一个名为“EnrollmentModel”的关联表来显示学生注册的课程。通常,如果这是SQL,我的查询将类似于:

SELECT * 
FROM EnrollmentModel as e, StudentModel as s, CourseModel as c
WHERE s.ID = e.StudentID AND e.CourseID = c.ID
那么有没有一种方法可以用LINQ来实现呢?或者我必须将语法从SQL“翻译”到LINQ(我不知道怎么做)

我的模式:

public class StudentModel
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ID { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public DateTime EnrollmentDate { get; set; }

    public virtual ICollection<EnrollmentModel> Enrollments {get; set; }
}

public class EnrollmentModel
{
    public int ID { get; set; }
    public int CourseID { get; set; }
    public int StudentID { get; set; }
    public Grade? Grade { get; set; }

    public virtual StudentModel Students { get; set; }
    public virtual CourseModel Courses { get; set; }
}

public class CourseModel
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ID { get; set; }
    public string Title { get; set; }
    public int Credits { get; set; }

    public virtual ICollection<EnrollmentModel> Enrollments  { get; set; }
}
公共课堂学生模型
{
[数据库生成(DatabaseGeneratedOption.None)]
公共int ID{get;set;}
公共字符串LastName{get;set;}
公共字符串名{get;set;}
公共日期时间注册日期{get;set;}
公共虚拟ICollection注册{get;set;}
}
公共班级注册模式
{
公共int ID{get;set;}
public int CourseID{get;set;}
公共int StudentID{get;set;}
公共等级?等级{get;set;}
公共虚拟学生模型学生{get;set;}
公共虚拟课程模型课程{get;set;}
}
公共类课程模型
{
[数据库生成(DatabaseGeneratedOption.None)]
公共int ID{get;set;}
公共字符串标题{get;set;}
公共整数积分{get;set;}
公共虚拟ICollection注册{get;set;}
}

如果将SQL查询更改为显式联接语法

SELECT * 
FROM EnrollmentModel as e
JOIN StudentModel AS s ON e.StudentID = s.ID
JOIN CourseModel  AS c ON e.CourseID  = c.ID
…将LINQ转换为匿名类型非常简单

var result = 
    from e in db.EnrollmentModel
    join s in db.StudentModel on e.StudentID equals s.ID
    join c in db.CourseModel  on e.CourseID  equals c.ID
    select new {e,s,c};