这是一个难以描述的问题。 我有一个包含表格测试和表格学生以及ScoreCards的数据库。 每个考试都有一个学生的FK,同样也用于记分卡。
学生可以多次参加考试,因此可以有许多测试记录指向同一个学生。
我目前只在记忆中使用记分卡。 我有一个记分卡对象列表:liScoreCard。 我遍历所有测试,每次迭代我创建一个新的记分卡对象,最后 - 如果它是最好的 - 我将它添加到列表中(如果没有,我只是更改列表中已有的记分卡上的测试次数):
liScoreCards.Add(SC);
如果学生只有一个测试,则列表中的SC包含学生对象(当我在查询中获得测试列表时,我使用“包含(”学生“)”。
如果在将来的测试中我再次找到同一个学生(在以后的测试中) 当我这样做: (将测试中的学生对象添加到新的记分卡对象) sc.Student = test.Student
列表中的:liScoreCards - 上一个SC对象。学生变为NULL而不是那里的Student对象。
我做错了什么?
是否可以将学生对象分配给新的ScroeCard对象,将其从列表中存储的旧记分卡对象中“删除”?
代码示例:
// Psuedo code:
liTest = DB.GetTests().Include("Student");
// Code:
List<ScoreCard> liScoreCard = new List<ScoreCard>();
foreach(Test st in liTest)
{
ScoreCard SC = new ScoreCard();
SC.Student = st.Student; // This line makes SC with the same StudentID in liScoreCard have the Student become null.
ScoreCard oldSC = liScoreCard.Find(x->x.StudentID == SC.StudentID);
// Some logic to see which grade is higher)
// either update oldSC or...
liScoreCard.Add(SC);
}
}