我需要在特定的Realisation
上获得所有具有Registration
的Students
。
我原以为它会是s => s.Registrations.RealisationId == realisationId
,但它不起作用:)。我试着把它做成示例代码中的样子,但我得到了:A lambda expression with a statement body cannot be converted to an expression tree
。我不知道如何才能正确地写出这个表达式,有人能帮我吗?
对不起,我想不出如何更好地命名这个问题。
数据库:
public class Student : BaseEntity {
public int StudentId {get; set;}
public virtual ICollection<Registration> Registrations {get; set;}
}
public class Registration : BaseEntity {
public int RegistrationId {get; set;}
public int StudentId {get; set;}
public int RealisationId {get; set;}
public Student Student {get; set;}
public Realisation Realisation {get; set;}
}
public class Realisation : BaseEntity {
public int RealisationId {get; set;}
public virtual ICollection<Registration> Registrations {get; set;}
}
我的尝试:
public IEnumerable<Student> GetByRealisationId(int realisationId) {
return Context.Set<Student>().Where(s => {
foreach(Registration r in s.Registrations) {
if (r.RealisationId == realisationId)
return true;
}
return false;
});
}
您需要选择ID并使用Contains
:
return Context.Set<Student>()
.Where(s => s.Registrations
.Select(r => r.RealisationId)
.Contains(realisationId));
通常,这会转换为WHERE IN
子句。