我已经成功创建了查询,用于通过 lambda 表达式以及其他方式从 6 个表中获取数据。(抱歉不知道如何称呼我应用的其他方法(。无论如何,现在的问题是,我不知道如何将此对象发送到视图。通常,我曾经发送模型或视图模型的对象。请帮忙!
提前非常感谢!
我尝试创建ViewModel并包含查询中包含的所有对象,但我无法解决它们。可能是错误的策略,也可能是我不知道该怎么做。
var my = _context.Clients.Join(_context.Consultants, cli => cli.consultantID, con => con.ConsultantId,
(cli, con) => new
{
aClient = cli,
aConsultant = con
}).Join(_context.ClientPhone.Where(ph => ph.PrimaryPhone), cli => cli.aClient.ClientCNIC, ph => ph.ClientCNIC, (cli, ph) => new
{
cli.aClient,
cli.aConsultant,
aPhone = ph
}).Join(_context.clientemail.Where(e => e.PrimaryEmail), cli => cli.aClient.ClientCNIC, e => e.ClientCNIC, (cli, e) => new
{
cli.aClient,
cli.aConsultant,
cli.aPhone,
aEmail = e
}).Join(_context.ITRStatus, cli => cli.aClient.ClientCNIC, itr => itr.ClientCNIC, (cli, itr) => new
{
cli.aClient,
cli.aConsultant,
cli.aEmail,
cli.aPhone,
aItr = itr
}).Join(_context.ClientStatus, cli => cli.aItr.ClientstatusId, ss => ss.clientstatusId, (cli, ss) => new
{
cli.aClient,
cli.aConsultant,
cli.aEmail,
cli.aItr,
cli.aPhone,
aStatus = ss
}).Select(s => new
{
s.aClient.clientName,
s.aClient.ClientCNIC,
s.aClient.ClientPassword,
s.aConsultant.ConsultantName,
s.aEmail.Email,
s.aPhone.Phone,
s.aStatus.StatusString
}).ToList();
return View(my);
我期望的结果是什么,我以某种方式通过模型将对象发送到视图,然后使用 foreach 在视图中迭代模型。
您可以在视图中执行类似动态@model操作。这样你就可以直接将变量"my"传递给它。
顺便说一句,您将失去对模型的智能感知
显然,我尝试了几种方法,找到了自己问题的解决方案!
这是我所做的。
只是为查询中包含的对象创建了视图模型。然后在控制器中如下所示:
var viewModel = new List<ClientIndexViewModel>();
foreach (var item in my)
{
viewModel.Add(new ClientIndexViewModel()
{
Client = item.aClient,
Phone = item.aPhone,
Consultant = item.aConsultant,
Email = item.aEmail,
ClientStatus = item.aStatus,
});
}
return View(viewModel);
View.cshtml
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@item.Client.clientName
</td>
</tr>
它是动态的,也提供智能感知。顺便说一句,我刚刚发布了足以理解的代码部分,请原谅任何不足。