通过集合属性的lambda表达式路径



我需要在特定的Realisation上获得所有具有RegistrationStudents

我原以为它会是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子句。

最新更新