选择子列表?

时间:2013-10-22 21:48:25

标签: entity-framework linq-to-entities

我有两种EF类型,研究和患者。一项研究可以有很多患者。我想从特定的研究中返回一份患者名单,所以我有一个这样的方法:

public IEnumerable<Patient> GetPatientsByStudyId(int id)
{
    return Context.Studies.Where(e => e.StudyId == id).Select(s => s.Patients).First();
}

这样可行,但看起来很奇怪,最后调用First()。我觉得我做得不对。是否有更清晰或更正确的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

你可以这样写:

public IEnumerable<Patient> GetPatientsByStudyId(int id)
{
    return Context.Studies.Single(e => e.StudyId == id).Patients;
}

这将获得所需的研究,然后选择与该研究相关的所有患者。当然,您需要确保id参数有效。以下代码将防止发生一些不必要的异常:

public IEnumerable<Patient> GetPatientsByStudyId(int id)
{
    Study selectedStudy = Context.Studies.SingleOrDefault(e => e.StudyId == id);
    return selectedStudy == null ? null : selectedStudy.Patients;
}

(如果您愿意,可以Enumerable.Empty<Patient>()代替null