使用LINQ遍历数据并在表中显示

时间:2019-05-21 07:47:16

标签: c# asp.net linq asp.net-core razor

我正在用Razor页面在ASP.NET Core中编写一个应用程序。我正在尝试在一组表中显示一个数据集,每个人一个表(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 :(得分:0)

您绑定的模型错误。与其在代码中创建DataList,不如在剃刀页面的内部foreach循环之前创建它(或在其之前发送空填充)

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

答案 1 :(得分:0)

在我看来,您的两个查询可以合并和简化:只需参加这一部分:

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