我有以下型号
public class Student
{
public int Id {get; set; }
public string Name {get; set; }
public ICollection<StudentToCourse> StudentToCourse {get; set; }
}
public class StudentToCourse
{
public int StudentId{get; set; }
public Student Student {get; set; }
public int CourseId{get; set; }
public Course Course {get; set; }
}
public class Course
{
public int Id {get; set; }
public string Name {get; set; }
public ICollection<StudentToCourse> StudentToCourse {get; set; }
}
我想获取每个学生证的所有课程列表,该怎么做?
答案 0 :(得分:0)
简短答案:选择并匹配ID值。或以编程方式-
foreach(Student s in yourstudentList)
{
foreach(StudentToCourse stc in s.StudentToCourse)
{
if(stc.StudentId = s.Id)
//this is one you want, do something with it
}
}
更好的答案:
首先让我们看一下您的模型...
想象一下基础数据库结构。
您的中间表被称为查找。
您实际上并不需要整个学生,也不需要其中的整个课程对象。
另外,您的Course对象不需要了解其他任何一个对象。
如果您可以想象数据库中的三个表,您将看到如何在逻辑上将学生连接到课程中的三个表。
您的模型仍然不完整。在您的应用程序中,您仍然需要一个容器,在这种情况下为List courseIds。这样,您的学生无需关心学生/课程查找表中的所有条目,只需关心适用于特定学生的条目即可。而且您有一个易于访问的对象,可以从数据库中提取数据或向数据库发送更新。
对于courseIds集合的初始填充,您将执行
SELECT FROM StudentToCourse where StudentId = x
然后,您可以在“课程”表上联接以提取诸如课程名称之类的值。 如果发现需要进行大量查找,则可以缓存课程列表并降低数据库流量,但需要付出一些代价。
每次结交新学生时,您都希望填充其课程ID列表;将学生提交数据库时,您将保存查找表。
这使您的对象在保持其关系的同时尽可能轻巧。
有多种方法可以在您的开发环境中编写SELECT语句,进行搜索,找到您喜欢的(或与您公司的当前实践相符)并习惯于始终使用同一条语句。它将使您的代码更具可读性和可管理性。