将 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>();
两个表处理学生记录: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>();