我没有明确定义复合表,因为EF会自动处理它,但是如何从一个表中查询结果与另一个表的ID: 举个例子:
{{1}}
我如何获得id = 3的学生的所有课程 我提出了这个问题:
{{1}}
我应该定义加入表吗?
答案 0 :(得分:5)
// Return all courses where at least one student has a specific id.
var studentId = 3;
var courses = context.Courses.Where(x => x.Students.Any(y => y.Id == studentId));
或者
var studentId = 3;
var courses = context.Students.Where(x => x.Id == studentId).SelectMany(x => x.Courses);
我应该定义加入表吗?
不,除非它包含任何感兴趣的内容。它是否添加了比表之间的连接更多的信息,例如DateAdded
?在那种情况下,我会为表创建一个实体。但不是这样。
答案 1 :(得分:0)
为什么不使用Student类的属性课程:
List<Course> coursesOfStudent3;
using (var dbContext = new MySchoolDbContext())
{
coursesOfStudent3 = dbContext.Students
.Where(student => student.studentId == 3)
.Single()
.Courses
.ToList();
}
如果没有StudentId == 3的学生,则会出现问题。 考虑使用SelectMany:
coursesOfStudent3 = dbContext.Students
.Where(student => student.studentId == 3)
.SelectMany(student => student.Courses)
.ToList();
如果没有StudentId == 3的学生,这个替代方案有效。但是只有当你能保证你的Where子句只返回一个学生时才有效,如果是通过ID选择的话当然就是这种情况。