首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个表联接,其中Where子句使用Lambda表达式。然后将对象发送到视图

使用多个表联接,其中Where子句使用Lambda表达式。然后将对象发送到视图
EN

Stack Overflow用户
提问于 2019-07-13 14:42:02
回答 2查看 44关注 0票数 0

我已经成功地创建了这个查询,用于通过lambda表达式以及其他方式从6个表中获取数据。(对不起,我不知道如何称呼其他方法)。无论如何,现在的问题是,我不知道如何将这个对象发送到视图。通常,我通常发送模型或ViewModel的对象。请帮帮我!

提前谢谢你!

我尝试过创建ViewModel,并包含了查询中包含的所有对象,但我只是无法解决这些问题。这可能是错误的策略,或者我只是不知道如何去做。

代码语言:javascript
复制
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);

我所期望的结果是,我以某种方式通过Model将对象发送到View,然后使用foreach在View中迭代模型。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-13 19:35:28

显然,我尝试了几种方法,并找到了解决我自己的问题!

这就是我所做的。

只需为查询中包含的对象创建视图模型。然后在控制器中如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
 <tbody>
    @foreach (var item in Model)
    {
        <tr>
            <td>
                @item.Client.clientName
            </td>
        </tr>

它是动态的,也提供IntelliSense。顺便说一句,我刚刚贴出了代码中足以理解的部分,原谅任何不足之处。

票数 0
EN

Stack Overflow用户

发布于 2019-07-13 15:04:08

您可以在视图中执行类似于“模型动态”之类的操作。这样你就可以直接把你的变量“我的”传递给它。

顺便说一句,你将失去你的模型的IntelliSense

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57020151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档