实体框架连接多个表并显示多个数据集

时间:2018-03-27 07:46:25

标签: c# asp.net-mvc entity-framework

这是我从多个表中获取数据并将其作为json返回的代码。但是它只允许一对一的关系。

问题:DoctorNote有多个结果集,我在获取数据时遇到问题。错误“序列包含多个元素”。关于我如何获取许多关系结果的任何建议?

    var person = (from p in _context.Patients
                      join e in _context.PatientAllocations
                      on p.patientID equals e.patientID
                      join d in _context.DoctorNotes
                      on p.patientID equals d.patientID
                      where p.patientID == patientID
                      select new
                      {
                              patient_patientID = p.patientID,
                              patient_isDeleted = p.isDeleted,
                              patient_isApproved = p.isApproved,
                              patient_updateBit = p.updateBit,
                              patientallocation_caregiverID = e.caregiverID,
                              patientallocation_doctorID = e.doctorID,
                              DoctorNote_doctorNoteID = d.doctorNoteID,
                              DoctorNote_note = d.note,
                              DoctorNote_createDateTime = d.createDateTime,
                              DoctorNote_patientID = d.patientID,
                              DoctorNote_isApproved = d.isApproved,
                              DoctorNote_isDeleted = d.isDeleted,
                      }).ToList().SingleOrDefault();
        return Ok(person);

3 个答案:

答案 0 :(得分:0)

SingleOrDefault方法抛出了异常,因此根据这一事实,您的查询似乎会返回多个元素。

要收集DoctorNotes,请从查询中删除SingleOrDefault方法

答案 1 :(得分:0)

您正在使用SingleOrDefault(),假设您的查询最多会返回一条记录。您可以尝试FirstOrDefault()它假设查询可以返回任意数量的记录,您首先需要。 您可能会看到this以了解两者之间的差异

                | 0 values    | 1 value     | > 1 value
FirstOrDefault  | Default     | First value | First value
SingleOrDefault | Default     | First value | Exception

答案 2 :(得分:0)

查询仍会返回3个DocterNotes。 FirstOrDefault位于总查询上,而不是DocterNotes上。

你能添加一个where子句吗? 例如,这应该有效:

where p.patientID == patientID
and DoctorNote_doctorNoteID == 3