Mon objectif est de combiner deux tableaux et de les afficher dans une liste sur une vue rasoir. Avec un peu d'aide, j'ai pu construire une requête linq qui extrait les données, ainsi qu'un viewModel.

J'ai la requête linq ici

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());
    }

Voici le modèle de vue que j'ai construit.

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; }
}

Je n'ai pas élaboré de vue de travail. Mon problème survient lorsque j'essaie d'utiliser une instruction foreach. Le modèle de vue ne reporte pas la liste. Veuillez indiquer comment afficher la liste dans la vue. Merci

Mise à jour:

C'est mon avis. Je l'ai coupé avec "..."

@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>

La mise à jour a ajouté un autre vm

public class AvailableJobListVM
{
    public List<AgentClientIndexVM> JobList { get; set; }
}
0
Nick Fleetwood 19 févr. 2021 à 04:05

1 réponse

Meilleure réponse

Si vous créez un autre modèle et créez une propriété de type List<AgentClientIndexVM>, vous pouvez énumérer au fur et à mesure que vous essayez.

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

Vous pouvez maintenant utiliser foreach

foreach(var element in Model.MyList) {
    statements
}
0
Lindstrøm 20 févr. 2021 à 08:51