簡體   English   中英

通過使用Lambda表達式的Where子句與2個或3個以上的表聯接。 然后將對象發送到視圖

[英]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);

我期望的結果是,我以某種方式通過Model將對象發送到View,然后使用foreach在View中迭代模型。

您可以在視圖中執行@model dynamic之類的操作。 這樣,您可以直接將變量“ my”傳遞給它。

順便說一句,您將失去模型的IntelliSense

顯然,我嘗試了幾種方法並找到了解決自己問題的方法!

這是我所做的。

只需為查詢中包含的對象創建視圖模型。 然后在控制器中如下:

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。 順便說一句,我剛剛發布了足以理解的代碼部分,請原諒任何不足。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM