我有以下EF实体:
public class Evaluation {
public Int32 Id { get; set; }
public DateTime Created { get, set; }
public String Interview { get; set; }
public virtual ICollection<Test> Tests { get; set; }
public virtual ICollection<Exam> Exams { get; set; }
}
public class Student {
public Int32 Id { get; set; }
public String Name { get; set; }
public virtual Evaluation Evaluation { get; set; }
}
public class Exam {
public Int32 Id { get; set; }
public Int32 Note { get; set; }
public Int32? Factor { get; set; }
public virtual Evaluation Evaluation { get; set; }
}
public class Test {
public Int32 Id { get; set; }
public Int32 Note { get; set; }
public Int32? Factor { get; set; }
public virtual Evaluation Evaluation { get; set; }
}
一些观察结果:
我在寻找的是:
对于每个学生,找到具有注释和因子的最后一个考试或考试。
然后获取这个Notes / Factors列表并将两者相乘:Result = Note * Factor
我正在尝试以下方法:
context.Evaluations
.Where(x => x.Exam != null || x.Test != null)
.GroupBy(x => x.Student)
在此之后,我不知道如何使用Note和Factor来进行最后一次考试或考试,并计算结果。
我该怎么做?
答案 0 :(得分:0)
你说评价可以有1或0个考试但是从代码中我知道它可以有很多(另外,其他东西不会加起来,但这只是因为它们是样本类)。
public virtual ICollection<Exam> Exams { get; set; }
如果你给出了更好的课程样本,我们可以找到一种方法来获得你想要的结果,使用1个LINQ查询。
无论如何,您可以在一些陈述中完成您想要的任务。
如果您的问题是如何结合考试和测试,您可以使用类似于以下伪代码的内容
public class UserQuiz {
public Int32 Id { get; set; }
public Int32 Note { get; set; }
public Int32? Factor { get; set; }
public Evaluation Evaluation { get; set; }
}
List<UserQuiz> examsAndTest=new List<UserQuiz>();
examsAndTest.AddRange(userExams.Select(e=>new UserQuiz(){ Id= e.Id /* copy the other properties here */}).ToList());
examsAndTest.AddRange(userTests.Select(e=>new UserQuiz(){ Id= e.Id /* copy the other properties here */}).ToList());
UserQuiz latestRecord= examsAndTest.OrderByDescending(e=>e.Evaluation.Created).FirstOrDefault();