连接超过 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。对了,我贴出代码中能看懂的部分,不足之处请见谅