Как получить ключ из нескольких сгруппированных панелей данных? - PullRequest
0 голосов
/ 08 ноября 2019

Контроллер

У меня есть данные, сгруппированные по 2 полям

lst = db.Database.SqlQuery<GridReportViewModel>(sqlquery).ToList();
Viewbag.DataGrid = lst.GroupBy(x => new { x.PosisiJabatanId, x.AplikasiId });

Просмотр

Как получить ключиз сгруппированных данных

@{int i = 1;}
@foreach (var item in @ViewBag.DataGrid)
{
    @:<tr>
        <td>@i</td>
        @*<td>@item.Key.PosisiJabatanId</td>*@ @*ERROR*@
        foreach (GridReportViewModel item2 in @item)
        {
            <td>@item2.NilaiKolom</td>
        }
        i = i + 1;
    @:</tr>
}

ОШИБКА: «объект» не содержит определения «Ключ»

Элемент отладки: введите описание изображения здесь

Ответы [ 3 ]

0 голосов
/ 08 ноября 2019

Добавить выберите по вашему запросу, как показано ниже

   lst = db.Database.SqlQuery<GridReportViewModel>(sqlquery).ToList();
        Viewbag.DataGrid = lst.GroupBy(x => new { x.PosisiJabatanId, x.AplikasiId })
            .Select(g => new { Key = g.Key, Items = g.ToList() });

, по вашему мнению, используйте, как показано ниже

@{int i = 1;}
@foreach (var item in @ViewBag.DataGrid)
{
    @:<tr>
        <td>@i</td>
        <td>@item.Key.PosisiJabatanId</td>
        foreach (GridReportViewModel item2 in @item.Items)
        {
            <td>@item2.NilaiKolom</td>
        }
        i = i + 1;
    @:</tr>
}
0 голосов
/ 08 ноября 2019

Вам необходимо получить данные, используя свойство. Когда вы используете new, он возвращает анонимный объект, поэтому вам нужно работать с динамическим объектом. как только вы получите значение вашего двумерного объекта key, вам снова нужно работать с динамическим объектом val.

@{int i = 1;}
@foreach (var item in @ViewBag.DataGrid)
{
    @:<tr>
    <td>@i</td>
    var val = item.GetType()
           .GetProperty("Key")
           .GetValue(item);

    var PosisiJabatanId = val.GetType()
           .GetProperty("PosisiJabatanId")
           .GetValue(val);

    var AplikasiId = val.GetType()
          .GetProperty("AplikasiId")
          .GetValue(val);

    <td>@PosisiJabatanId</td>
    <td>@AplikasiId</td>

    i = i + 1;
@:</tr>
}

you can check value.

0 голосов
/ 08 ноября 2019

Вы заполнили ViewBag значением анонимного типа, и вы не можете привести их в View, вам нужно изменить эту строку

lst.GroupBy(x => new { x.PosisiJabatanId, x.AplikasiId });

на

lst.GroupBy(x => new MyObject { x.PosisiJabatanId, x.AplikasiId });

и привести *От 1009 * до MyObject в вашем View

@foreach (var item in (MyObject)ViewBag.DataGrid) {...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...