Использование LINQ для циклического прохождения данных и отображения в таблице - PullRequest
0 голосов
/ 21 мая 2019

Я пишу приложение в ASP.NET Core со страницами Razor.Я пытаюсь отобразить набор данных в наборе таблиц с одной таблицей на человека (SubmittedBy), а затем данные таблицы, которые были отправлены этим человеком.

Моя страница бритвы выглядит примерно так (уменьшено длякраткость).

@foreach (var user in Model.TableList)
{
    <table class="table">
        <thead>
            <tr>
                <th>@Html.DisplayNameFor(model => model.LoadTable.SubmittedBy): @Html.DisplayFor(modelItem => user.SubmittedBy)</th>
            </tr>
            <tr>
                <th>@Html.DisplayNameFor(model => model.LoadTable.UID)</th>
        ...
        ...
        ...
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model.DataList)
            {
                <tr>
                    <th scope="row" class="text-center align-middle">
                        @Html.DisplayFor(modelItem => item.UID)
                    </th>
                    <td class="text-center align-middle">
                        @Html.DisplayFor(modelItem => item.Age)
                    </td>
            ...
            ...
            ...
        </tr>
        }
    </tbody>
    </table>
}

Я использую LINQ для создания списков и заполнения таблицы следующим образом:

public IEnumerable<LoadTable> TableList;
public IEnumerable<LoadTable> DataList;

TableList = _context.LoadTable.Where(o => o.Approver == GetADDetails.displayName || o.Approver == GetADDetails.userName).GroupBy(user => user.SubmittedBy).Select(group => group.First()).ToList();
DataList = TableList.Where(p => TableList.Any(p2 => p2.SubmittedBy == p.SubmittedBy)).ToList();

Ищем конечный результат, подобный следующему:

enter image description here

Я не могу получить данные на дисплее правильно, и что-то не хватает.Кто-нибудь может указать мне правильное направление?

Спасибо,

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Мне кажется, что ваши два запроса могут быть немного объединены и упрощены: просто примите эту часть:

_context
    .LoadTable
    .Where(o => o.Approver == GetADDetails.displayName || o.Approver == GetADDetails.userName)
    .GroupBy(user => user.SubmittedBy);

, которая вернет коллекцию IGrouping<TKey, TElement>.Вы можете перебрать коллекцию групп, где ключом будет пользователь, а значением будет коллекция элементов, связанных с пользователем.Например:

foreach (var userWithItems in Model.TableList)
{
    var user = userWithItems.Key;

    // TODO: Render the table per user here

    foreach (var item in userWithItems)
    {
        // TODO: Render the items for the user here
    }
}
0 голосов
/ 21 мая 2019

Вы неправильно связываете модель. Вместо создания DataList в коде просто создайте ее перед внутренним циклом foreach на странице Razor (или отправьте пустую заливку перед ней)

@foreach (var user in Model.TableList)
{
    <table class="table">
        <thead>
            <tr>
                <th>@Html.DisplayNameFor(model => model.LoadTable.SubmittedBy): @Html.DisplayFor(modelItem => user.SubmittedBy)</th>
            </tr>
            <tr>
                <th>@Html.DisplayNameFor(model => model.LoadTable.UID)</th>
        ...
        ...
        ...
            </tr>
        </thead>
        <tbody>
            @(var DataList=Model.TableList.Where(p=>p.SubmittedBy==user.SubmittedBy).ToList();)
            @foreach (var item in DataList)
            {
                <tr>
                    <th scope="row" class="text-center align-middle">
                        @Html.DisplayFor(modelItem => item.UID)
                    </th>
                    <td class="text-center align-middle">
                        @Html.DisplayFor(modelItem => item.Age)
                    </td>
            ...
            ...
            ...
        </tr>
        }
    </tbody>
    </table>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...