0
我有两种EF类型,Study和Patient。一项研究可以有很多患者。我想从一个特定的研究返回的患者名单,所以我有这样的方法:选择子列表?
public IEnumerable<Patient> GetPatientsByStudyId(int id)
{
return Context.Studies.Where(e => e.StudyId == id).Select(s => s.Patients).First();
}
这工作,但它肯定看起来怪异,并在最后,首先()调用。我觉得我做得不对。有没有更清晰或更正确的方法来做到这一点?
其实我有查询不会返回所有患者的名单(有4个在我的情况),所以它的行为和预期的一样 - 但是它是让我为我感到困惑的First()。你的语法也不适合我。没有'Select()'关闭'Single()'。也许这是因为我使用EF6? – Nicros
我刚刚编辑了我的帖子,确实是一个错误。它现在应该工作。在您最初的查询中,Context.Studies.Where(e => e.StudyId == id).Select(s => s.Patients)会为您提供一组患者集合,因为Select不会压扁集合(与SelectMany不同) 。以此查询的First()元素为您提供患者集合,这就是您仍然可以获得所需结果的原因。 –
这工作,感谢编辑。我必须添加的唯一东西是患者包括 - 所以'上下文。研究。包括(“患者”)。单等。这是因为我的EF延迟加载设置。谢谢! – Nicros