Asp.net mvc 与多个表联接并在视图中显示来自多个表的数据
我必须将数据输入下表: 此表中的数据主要来自一个表“TBLPartient”,但此表中的最后一个条目(即“AppointmentDate”)来自另一个表,但要获得此单个条目,我必须使用三个表(即。 TBL患者 tblPatientBill和TBLPatientAppoition。 为此,我在控制器中编写了此查询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
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();