📜  来自多个表的 linq - C# (1)

📅  最后修改于: 2023-12-03 15:10:41.848000             🧑  作者: Mango

多个表的Linq - C#

简介

Linq是C#编程中非常方便的工具,可以方便的操作数据。在Linq中,对于多个表的操作,需要将多个表进行关联,可以使用join方法将多个表进行关联,通过select方法选择需要的数据。

数据源

假设我们有两个数据源:学生表(Student)和成绩表(Score)。两个表的结构如下:

学生表

| StudentId | Name | Age | | --------- | ----- | --- | | 1 | Alice | 18 | | 2 | Bob | 17 |

成绩表

| StudentId | Subject | Score | | --------- | ------- | ----- | | 1 | Math | 80 | | 1 | English | 85 | | 2 | Math | 90 | | 2 | English | 75 |

代码实现
连接查询

使用join方法将学生表和成绩表进行连接,并通过select方法选择需要的数据:

var result = from student in students
             join score in scores on student.StudentId equals score.StudentId
             select new { student.Name, student.Age, score.Subject, score.Score };

结果为:

| Name | Age | Subject | Score | | ----- | --- | ------- | ----- | | Alice | 18 | Math | 80 | | Alice | 18 | English | 85 | | Bob | 17 | Math | 90 | | Bob | 17 | English | 75 |

左连接查询

如果需要查询所有学生的成绩信息,包括没有成绩信息的学生,可以使用左连接(left join):

var result = from student in students
             join score in scores on student.StudentId equals score.StudentId into gj
             from subScore in gj.DefaultIfEmpty()
             select new { student.Name, student.Age, Subject = subScore == null ? "" : subScore.Subject, Score = subScore == null ? 0 : subScore.Score };

结果为:

| Name | Age | Subject | Score | | ----- | --- | ------- | ----- | | Alice | 18 | Math | 80 | | Alice | 18 | English | 85 | | Bob | 17 | Math | 90 | | Bob | 17 | English | 75 | | Carol | 16 | | 0 |

其中,DefaultIfEmpty方法用于保证左连接查询可以返回空值。

总结

Linq可以方便的操作多个表的数据,使用join方法可以将多个表进行连接,使用left join可以查询所有数据,即使有些数据没有对应的数据。在实际使用过程中,需要特别注意数据源的完整性和正确性。