我正在使用Entity Framework在ASP.NET MVC中工作。我的数据库中有两个表AppointmentDb
和StudentDb
。我希望将它们加入控制器并将结果传递给控制器中的另一个操作方法。我在Details
操作中传递的这个新表的返回类型是什么?
public ActionResult Index(AdminViewModel model)
{
if (ModelState.IsValid)
{
var innerJoinQuery = from appointment in AppointmentDb
join student in StudentDb on appointment.StudentFirstName equals student.FirstName
select appointment;
return View("Details",innerJoinQuery);
}
}
public ActionResult Details(?????? innerJoinQuery)
{
return View();
}
修改1:
从下面的答案中,我编辑为:
public ActionResult Details(IQueryable<Appointment> appointment)
{
return View(appointment);
}
我仍然无法按照下面的要求调用列。其中一些AppointmentID
来自AppointmentDb
,其余来自StudentDb
以下是查看Details.cshtml
:
@model IQueryable<OdeToFood.Entities.Appointment>
@{
ViewBag.Title = "Details";
}
<h2>Index</h2>
@Html.ActionLink("Back to Search", "Index")
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.AppointmentID)
</th>
<th>
@Html.DisplayNameFor(model => model.StudentFirstName)
</th>
<th>
@Html.DisplayNameFor(model => model.)
</th>
<th>
@Html.DisplayNameFor(model => model.StudentID)
</th>
<th>
@Html.DisplayNameFor(model => model.AppointmentDate)
</th>
<th>
@Html.DisplayNameFor(model => model.AppointmentTime)
</th>
<th>
@Html.DisplayNameFor(model => model.Status)
</th>
</tr>
</table>
我应该如何使View
工作?
编辑2:
我已根据编辑1中的建议进行了编辑。我的完整View.cshtml
中还有一个小错误。这是我收到的错误foreach cannot operate on Variables of type OdeToFood.ViewModels.AdminDetailsViewModel because it does not contain definition for GetEnumerator
@model AdminDetailsViewModel
@{
ViewBag.Title = "Details";
}
<h2>Index</h2>
@Html.ActionLink("Back to Search", "Index")
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.AppointmentID)
</th>
<th>
@Html.DisplayNameFor(model => model.StudentFirstName)
</th>
<th>
@Html.DisplayNameFor(model => model.StudentLastName)
</th>
<th>
@Html.DisplayNameFor(model => model.StudentID)
</th>
<th>
@Html.DisplayNameFor(model => model.AppointmentDate)
</th>
<th>
@Html.DisplayNameFor(model => model.AppointmentTime)
</th>
<th>
@Html.DisplayNameFor(model => model.Status)
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.AppointmentID)
</td>
<td>
@Html.DisplayFor(modelItem => item.StudentFirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.StudentLastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.StudentID)
</td>
<td>
@Html.DisplayFor(modelItem => item.AppointmentDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.AppointmentTime)
</td>
<td>
@Html.DisplayFor(modelItem => item.Status)
</td>
</tr>
}
</table>
答案 0 :(得分:1)
您的查询代码返回IQueryable<AppointmentDb>
:
public ActionResult Details(IQueryable<AppointmentDb> innerJoinQuery)
{
return View();
}
最好先执行查询:
var innerJoinQuery = (from appointment in AppointmentDb
join student in StudentDb
on appointment.StudentFirstName equals student.FirstName
select appointment).ToList();
然后传递结果列表:
public ActionResult Details(List<AppointmentDb> innerJoinQuery)
{
return View();
}
您需要创建一个类来保存来自多个表的数据:
class MyViewModel
{
public int AppointmentID { set; get; }
public string StudentFirstName { set; get; }
// continue the rest
}
然后将您的查询更改为:
from appointment in AppointmentDb
join student in StudentDb
on appointment.StudentFirstName equals student.FirstName
select new MyViewModel()
{
AppointmentID = AppointmentDb.AppointmentID,
StudentFirstName = StudentDb.StudentFirstName
// continue the rest
};
答案 1 :(得分:1)
您可以使用对象类型
public ActionResult Details(object innerJoinQuery)
{
return View();
}