将 Sql 查询转换为 LINQ 中的表达式

Convert Sql Query to expression in LINQ

两个表处理学生记录:Students_Subjects 和 Students_Tests。这些表是 m 到 n 的关系。在下面的 sql 中,我们列出了参加考试的科目 44 的学生。 (不可否认,有更简单的方法可以得到相同的结果)。

这是我要转换的 SQL 查询

SELECT *
FROM Students_Subjects AS s 
LEFT OUTER JOIN Students_Tests AS r
    ON s.Stud_National_Id = r.Stud_National_Id 
    AND s.Subject_Id = r.Subject_Id
WHERE s.Subject_Id = 44

我们如何使用 Linq 表达式做到这一点?

注意我必须更改列的名称。 在超过一列上连接 2 个表时,您连接的列必须具有相同的名称。

    void Main()
    {
        Students_Subjects.Add(new Student_Subject() { Subject_ID = 44, Stud_National_ID = 157 });
        Students_Tests.Add(new Student_Test() { Subject_ID = 44, Stud_National_ID = 157 });
    
        var q = Students_Subjects
            .Join(Students_Tests,s => new{s.Stud_National_ID,s.Subject_ID},r=>new {r.Stud_National_ID,r.Subject_ID},(s,r) => new {s.Stud_National_ID,s.Subject_ID})
            .Where(s => s.Subject_ID == 44);
    }
    class Student_Subject
    {
        public int Subject_ID {get;set;}
        public int Stud_National_ID { get; set; }
    }
    List<Student_Subject> Students_Subjects = new List<Student_Subject>();
    class Student_Test
    {
        public int Subject_ID { get; set; }
        public int Stud_National_ID { get; set; }
    }
    List<Student_Test> Students_Tests = new List<Student_Test>();