连接超过 2 个或 3 个表,使用 Lambda 表达式的 Where 子句。然后将对象发送到视图
Joins with more than 2 or 3 tables, with Where clause using Lambda Expressions. Then sending the object to the View
我已成功创建查询,通过 lambda 表达式以及其他方式从 6 个表中获取数据。 (抱歉,不知道如何称呼我应用的其他方法)。无论如何,现在的问题是,我不知道如何将这个对象发送到视图。通常我用来发送模型或 ViewModel 的对象。请帮忙!
在此先感谢您!
我已经尝试创建 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 dynamic 之类的操作。
这样你就可以直接将变量 'my' 传递给它。
顺便说一句,您将失去对模型的 IntelliSense
显然,我尝试了几种方法并找到了解决我自己问题的方法!
这是我做的。
只是为查询中包含的对象创建了视图模型。然后在controller中如下:
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>
它是动态的并且也提供 IntelliSense。对了,我贴出代码中能看懂的部分,不足之处请见谅
我已成功创建查询,通过 lambda 表达式以及其他方式从 6 个表中获取数据。 (抱歉,不知道如何称呼我应用的其他方法)。无论如何,现在的问题是,我不知道如何将这个对象发送到视图。通常我用来发送模型或 ViewModel 的对象。请帮忙!
在此先感谢您!
我已经尝试创建 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 dynamic 之类的操作。 这样你就可以直接将变量 'my' 传递给它。
顺便说一句,您将失去对模型的 IntelliSense
显然,我尝试了几种方法并找到了解决我自己问题的方法!
这是我做的。
只是为查询中包含的对象创建了视图模型。然后在controller中如下:
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>
它是动态的并且也提供 IntelliSense。对了,我贴出代码中能看懂的部分,不足之处请见谅