使用SQL语法在LINQ中执行连接
我目前正在学习实体框架,并试图构建一个注册系统。现在,我正试图使用一个名为“EnrollmentModel”的关联表来显示学生注册的课程。通常,如果这是SQL,我的查询将类似于:使用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
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};