Asp.net mvc 与多个表联接并在视图中显示来自多个表的数据

Asp.net mvc 与多个表联接并在视图中显示来自多个表的数据,asp.net-mvc,entity-framework,linq,join,Asp.net Mvc,Entity Framework,Linq,Join,我必须将数据输入下表: 此表中的数据主要来自一个表“TBLPartient”,但此表中的最后一个条目(即“AppointmentDate”)来自另一个表,但要获得此单个条目,我必须使用三个表(即。 TBL患者 tblPatientBill和TBLPatientAppoition。 为此,我在控制器中编写了此查询 public ActionResult PrintPartialViewToPdf(int id) { List<tblPatientAp

我必须将数据输入下表:

此表中的数据主要来自一个表“TBLPartient”,但此表中的最后一个条目(即“AppointmentDate”)来自另一个表,但要获得此单个条目,我必须使用三个表(即。 TBL患者 tblPatientBill和TBLPatientAppoition。 为此,我在控制器中编写了此查询

public ActionResult PrintPartialViewToPdf(int id)
        {
            List<tblPatientAppointment> tblappointments = db.tblPatientAppointments.ToList();
            List<tblPatientBill> tblbill = db.tblPatientBills.Where(x=>x.ID == id && x.is_active == true).ToList();
            List<tblPatient> tblpatient = db.tblPatients.ToList();


            var result = (from p in tblbill
                          join o in tblappointments on p.PatientAppointmentID equals o.ID
                          join c in tblpatient on o.patient_id equals c.Patient_id
                          select new
                          {
                              c.Patient_Name,
                              c.Patient_address,
                              c.Contact_no,
                              c.Age,
                              c.Gender,
                              c.Date_of_Birth,
                              o.AppointmentDate,
                          }).ToList();


                var report = new PartialViewAsPdf("~/Views/Shared/PatientBillToPDF.cshtml", result);
                return report;


        }
在我的视图中,当我想在视图中显示结果时,这里是我的代码。 patientbilltopf.cshtml

我想知道的是:
请检查我的linq查询是否符合要求?第二件事是在我看来,我无法获得预约日期,因为它包括TBLPaient模型。如何显示查询返回结果的两个不同表中的数据,但我无法在视图中显示,因为它们属于两个不同的型号。谢谢显示约会日期时,您的代码似乎不正确

<tr>
<th>@Html.DisplayNameFor(model => model.AppointmentDate)</th>
<td>@Html.DisplayFor(model => item.Date_of_Birth)</td>
</tr>
第三行将显示出生日期。 换成

<td>@Html.DisplayFor(model => model.AppointmentDate)</td>
要知道查询是否有效,您必须解释您正在尝试做什么。您是否获得了针对单个患者的结果。如果我是您,在运行查询之前,我不会将整个表加载到内存中

如何显示查询返回结果的两个不同表中的数据

实际上,您需要在此处创建一个ViewModel,并使用它强烈地键入视图。您的ViewModel看起来像:

public class PatientAppointmentViewModel
{
     public string PatientName { get;set; }
     public string PatientAddress { get;set; }
     public string ContactNo { get;set;}
     ......
     ......
     public DateTime AppointmentDate { get;set;}
}
在控制器中,我们需要填充ViewModel:

 var result = (from p in tblbill
                      join o in tblappointments on p.PatientAppointmentID equals o.ID
                      join c in tblpatient on o.patient_id equals c.Patient_id
                      select new PatientAppointmentViewModel
                      {
                          PatientName = c.Patient_Name,
                          PatientAddress = c.Patient_address,
                          ......
                          ......
                          AppointmentDate = o.AppointmentDate
                      }).ToList();
视图需要与IEnumerable绑定:


是的,我得到的是单个患者的结果,我将其作为预约日期写在了第三行。这里只错了。让我编辑它。实际问题是,我如何在表中检索预约日期,因为我在视图中只添加了一个模型。有道理,让我尝试一下。它工作得很好,非常感谢您的指导帮助:使用ViewModel,而不是将联接结果直接发送到视图。看到这个帖子了吗-
 var result = (from p in tblbill
                      join o in tblappointments on p.PatientAppointmentID equals o.ID
                      join c in tblpatient on o.patient_id equals c.Patient_id
                      select new PatientAppointmentViewModel
                      {
                          PatientName = c.Patient_Name,
                          PatientAddress = c.Patient_address,
                          ......
                          ......
                          AppointmentDate = o.AppointmentDate
                      }).ToList();
@model IEnumerable<HMS.Models.PatientAppointmentViewModel>

@{
    Layout = null;
}
List<tblPatientAppointment> tblappointments = db.tblPatientAppointments.ToList();
var result = (from p in db.tblPatientBills
              join o in db.tblPatientAppointmentson p.PatientAppointmentID equals o.ID
              join c in db.tblPatients on o.patient_id equals c.Patient_id
              where p.ID == id && p.is_active == true
              select new PatientAppointmentViewModel
              {
                  PatientName = c.Patient_Name,
                  PatientAddress = c.Patient_address,
                  ......
                  ......
                  AppointmentDate = o.AppointmentDate
               }).ToList();