Mi objetivo es combinar dos tablas y mostrarlas en una lista en una vista de maquinilla de afeitar. Con algo de ayuda, pude construir una consulta linq que extrae los datos, así como un viewModel.

Tengo la consulta linq aquí

public IActionResult AvailableJobIndex()
    {
        var today = DateTime.Now.Date;
        
        var jobs =
           from h in _context.PostThrs
           join e in _context.PostEigs on h.ThrZero equals e.EigZero
           where h.ThrDate > today && h.ThrText == "SERVICE DATE"
              && e.EigAgen == "OPEN"
           select new AgentClientIndexVM
           {
               Zero = h.ThrZero,
               ThrDate = h.ThrDate,
               ThrTime = h.ThrTime,
               ThrText = h.ThrText,
               EigAgen = e.EigAgen,
               EigRole = e.EigRole,
               EigLoad = e.EigLoad,
               EigNote = e.EigNote
           };


        return View(jobs.ToList());
    }

A continuación se muestra el modelo de vista que construí.

public class AgentClientIndexVM
{
    public string Zero { get; set; }

    public DateTime ThrDate { get; set; }

    public string ThrTime { get; set; }

    public string ThrText { get; set; }

    public string EigAgen { get; set; }

    public string EigRole { get; set; }

    public decimal EigLoad { get; set; }

    public string EigNote { get; set; }
}

No he creado una vista de trabajo. Mi problema surge cuando trato de usar una declaración foreach. El modelo de vista no transfiere la lista. Indique cómo mostrar la lista en la vista. Gracias

Actualizar:

Esta es mi opinión. Lo corté con "..."

@model AURA.ViewModels.AgentClientIndexVM 

@{
    ViewData["Title"] = "AvailableJobIndex";
}

<h1>Available Job Index</h1>

<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Zero)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.ThrDate)
            </th>
            ...
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayNameFor(model => model.Zero)
                </td>
                <td>
                    @Html.DisplayNameFor(model => model.ThrDate)
                </td>
                ...
                <td>
                    <a asp-action="PostDetail" asp-route-zero="@item.Zero">Details</a>
                </td>
            </tr>
        }
    </tbody>
</table>

Actualización agregó otra máquina virtual

public class AvailableJobListVM
{
    public List<AgentClientIndexVM> JobList { get; set; }
}
0
Nick Fleetwood 19 feb. 2021 a las 04:05

1 respuesta

La mejor respuesta

Si crea otro modelo y crea una propiedad de tipo List<AgentClientIndexVM>, puede enumerar mientras lo intenta.

public class MyPageModel {
    public List<AgentClientIndexVM> MyList {get; set;}
}

MyPageModel model = new List<AgentClientIndexVM>();
model.MyList = from h in _context.PostThrs
               join e in _context.PostEigs on h.ThrZero equals e.EigZero
               where h.ThrDate > today && h.ThrText == "SERVICE DATE" && e.EigAgen == "OPEN"
               select new AgentClientIndexVM
               {
                   Zero = h.ThrZero,
                   ThrDate = h.ThrDate,
                   ThrTime = h.ThrTime,
                   ThrText = h.ThrText,
                   EigAgen = e.EigAgen,
                   EigRole = e.EigRole,
                   EigLoad = e.EigLoad,
                   EigNote = e.EigNote
               }.ToList();

        return View(model);

@model AURA.ViewModels.MyPageModel

Ahora puedes usar foreach

foreach(var element in Model.MyList) {
    statements
}
0
Lindstrøm 20 feb. 2021 a las 08:51