C# EF:如何为GradeId=1的“学生”获取“成绩”实体

C# EF:如何为GradeId=1的“学生”获取“成绩”实体,c#,entity-framework,C#,Entity Framework,我有下面的数据库结构和数据 下面是实体和dbContext类 看起来您实际上是在尝试获取Id等于1的成绩,并预加载相关数据。因此,您可以尝试以下方法: var data = context.Grades.Include(x => x.Students).SingleOrDefault(x => x.Id == 1); 一种可能的解决办法: var data = context.Grades .Join(context.Students.Where(s => s.G

我有下面的数据库结构和数据

下面是实体和dbContext类


看起来您实际上是在尝试获取Id等于1的成绩,并预加载相关数据。因此,您可以尝试以下方法:

var data = context.Grades.Include(x => x.Students).SingleOrDefault(x => x.Id == 1);

一种可能的解决办法:

var data = context.Grades  
   .Join(context.Students.Where(s => s.GradeId == 1),
      g => g.Id,        
      s => s.GradeId,  
      (g, s) => new { Id = s.Id, GradeName = g.GradeName }).ToList();

您是否尝试过var data=context.Grades.Includex=>x.Students.Wherey=>y.GradeId==GradeId.SingleOrDefault;否则,为什么不从关系的另一面来做呢?你可以说context.Students.Includex=>x.Grades.Wherex=>x.GradeId==GradeId;我想这取决于您试图实现的目标。y=>y.GradeId给出编译错误,因为GradeId不是Student的属性,这应该是因为您没有将Grade作为导航属性包含在Student上。您可以将public Grade Grade{get;set;}添加到您的学生实体中以启用该agree,但我不能将其添加到实际的生产代码中:否则,我认为您可能必须在两个查询中完成,而不是使用include。除非Somedusts的答案符合您的要求?s=>s.GradeId==1给出编译错误,因为GradeId不是的属性Student@user584018是的,但是您可以考虑将年级导航和GrADID属性添加到学生类中。
var data = context.Grades.Include(x => x.Students).SingleOrDefault(x => x.Id == 1);
var data = context.Grades  
   .Join(context.Students.Where(s => s.GradeId == 1),
      g => g.Id,        
      s => s.GradeId,  
      (g, s) => new { Id = s.Id, GradeName = g.GradeName }).ToList();