我有两个表,例如,Student
和Grade
.
这两个表是多对多的关系,所以表是StudentGrade
.
通过使用.SelectMany
查询,我可以检索所有有关系的记录。
例如
var myResult = myDb.Student.SelectMany(x => x.Grade).ToList();
但是,假设我在Student
表中添加了一条新记录,这条记录与Grade
没有关系,这个新记录不能通过使用上面的查询来检索。
如何检索包括这个新数据在内的所有数据?
Student
Id Name Age
1 AAA 4
2 BBB 5
3 CCC 6
4 DDD 7
Grade
Id Name
1 G1
2 G2
3 G3
4 G4
StudentGrade
Student Grade
2 1
2 2
2 3
3 3
Require result:
Id Name Age Grade
1 AAA 4
2 BBB 5 G1
2 BBB 5 G2
2 BBB 5 G3
3 CCC 6 G3
4 DDD 7
我发现完整的外连接会有所帮助,但它会在多对多关系中工作吗?
如何解决这个问题?
var result = (from s in myDb.Student
from g in myDb.Grades
where !g.Select(x => x.Student).Contains(s) || g.Student == null || g.Student == s).ToList();
只要我理解了你的问题,这应该给你
- 所有有成绩的学生,
- 所有没有学生的年级,
- 和所有没有成绩的学生。我没有看到你的模型,但这应该有帮助
var myResult = myDb.Student。SelectMany (x =比;
x.Grade) .ToList ();
这个查询的意思是:检索包含Student的所有Grades。如果你想要学生,选择学生,如果你想要包括成绩。
var myResult = myDb.Students.Include(x => x.Grades).ToList();