Как обрабатывать ViewBag с нулевыми значениями из linq с помощью левого внешнего соединения в режиме razor

#c# #asp.net-mvc #linq #viewbag

#c# #asp.net-mvc #linq #viewbag

Вопрос:

Я объединяю несколько таблиц с помощью linq. Проблема в том, что мне нужно присоединиться к таблице, которая будет иметь некоторые нулевые значения в некоторых строках. Я думаю, что само объединение работает нормально, но когда я перебираю свой ViewBag, я получаю сообщение об ошибке из-за нулевых значений.

Это мой код: контроллер:

 ViewBag.coaching = (from kst in db.kursister
                                 join kursus_kursist in db.kursus_kursist
                                 on kst.kursist_id equals kursus_kursist.kursist_id
                                 join kursus in db.kurser
                                 on kursus_kursist.kursus_id equals kursus.kursus_id
                                 join coach in db.jobcoach
                                 on kst.kursist_id equals coach.kursist_id into coachJoin
                                 where kursus.kursus_id == id
                                 from cj in coachJoin.DefaultIfEmpty()
                                select new CoachHoldModel { kst = kst, kursus = kursus, cj = cj });
  

Вот мое мнение:

 @model IEnumerable<Itucation.Models.CoachHoldModel>

@{
    ViewBag.Title = "Karriere Coach Hold";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Protokol</h2>

<div>

    <h3>
        @{
            foreach (var navn in (ViewBag.kursus))
            {
                @navn.kursus_navn
            }
        }
    </h3>
    <table class="table-bordered">
        <tr>
            <td colspan="2" style="border:0;"></td>
            <th>Status</th>
            <td><img src="~/Content/Images/logo.png" height="30" /></td>
        </tr>

        @{
            foreach (var item in (ViewBag.coaching))
            {
                <tr>
                    <td>@item.kst.fornavn</td>
                    <td>@item.kst.efternavn</td>
                    <td>
                        @item.cj.status
                    </td>

                    <td colspan="2"></td>
                </tr>
            }
        }
    </table>
</div>
  

Это @item.cj.status, который будет содержать нулевые значения.

Цикл forech выполняет итерацию по списку учащихся. У некоторых студентов установлен статус, у некоторых нет. я хотел бы отобразить значение для учащихся, у которых есть значение статуса, и игнорировать остальные.

Любая помощь будет с благодарностью.

Комментарии:

1. «я хотел бы отобразить значение для учащихся, у которых есть значение статуса, и игнорировать остальные» Неясно, просите ли вы игнорировать целых учащихся, у которых нет установленного статуса, или вы хотите просто оставить статус пустым.

Ответ №1:

Почему бы не проверить, не равно ли оно null, а затем показать статус?

 <td>
    @if (item.cj != null) // or item.cj?.status
    {
        <span>@item.cj.status</span>
    }
</td>
  

Комментарии:

1. Действительно, @Heytam, почему бы и нет? Я думаю, потому что я не такой умный. Теперь это работает, и я чувствую себя глупо 🙂 — большое вам спасибо за вашу помощь.