Blazor:从列表中增加现有的@foreach

Blazor: Incrementing an existing @foreach from a list

我有一个 MySQL 数据库,我正在从中创建一个列表,然后使用 @foreach 在 table 中显示。我目前在 table 中有一个“0”作为占位符,但我需要第一个是 1,然后是 2,等等。我不想使用现有的键,因为我过滤了列表 (selectedUser ) & 希望列表始终显示条目数,而不是如何在数据库中引用它。

@foreach (var u in Users.Where(d => d.User == selectedUser))
{
    <tr>
        <td title="">0</td>
        <td>@u.User</td>
        <td>@u.UserLevel</td>
        <td>(you get the idea)</td>
    </tr>
}

我的@code 块的相关部分:

List<DBTestModel> Users;    

protected override async Task OnInitializedAsync()
    {
        string sql = "select * from MyTable";
        Users = await _data.LoadData<DBTestModel, dynamic>(sql, new { }, _config.GetConnectionString("default"));
    }

我对此还是很陌生(这是我第一次涉足非常简单的开发 UI),所以请原谅我问的问题有点多;我做了很多谷歌搜索并找到了很多答案,但我不能直接将任何答案应用于这种情况(我认为是因为人们只包含了他们的部分被破坏的部分,我需要看到它的全部才能理解它)。我相信我需要的是:

var i = 0;

i++;

但我似乎没有把它们放在正确的位置。

类似于:

@{ var x = 1; }
@foreach (var u in Users.Where(d => d.User == selectedUser))
    {
        <tr>
            <td title="">@x</td>
            <td>@u.User</td>
            <td>@u.UserLevel</td>
            <td>(you get the idea)</td>
        </tr>
    x++;
    }

修正案

我的实际测试代码是这样的:

@page "/Test"

@{ var x = 1;}
@foreach (var c in Cities)
{
    <div> @x - @c</div>
    x++;
}

@code {
    private List<string> Cities => new List<string>() { "Adijan", "Lagos", "Tripoli" };
}

这给你:

我只是把题码转进去了

假设 Users 是一个 IEnumerable<T>,如何创建一个扩展方法来公开可枚举中每个项目的索引?

public static class EnumerableExtensions
{    
    public static IEnumerable<(int Index, T Item)> WithIndex<T>(this IEnumerable<T> source)
    {
        if (source == null)
        {
            throw new ArgumentNullException(nameof(source));
        }

        return source.Select((item, index) => (index, item));
    }
}

然后您将能够做到:

@foreach (var result in Users.Where(d => d.User == selectedUser).WithIndex())
{
    <tr>
        <td title="">@result.Index</td>
        <td>@result.Item.User</td>
        <td>@result.Item.UserLevel</td>
    </tr>
}

Blazor REPL

以下有效 - 非常感谢所有回复!

{ var i = 1; 
    @foreach (var u in Users.Where(d => d.User == selectedUser))
    {
        <tr>
            <td title="">@i</td>
            <td>@u.User</td>
            <td>@u.UserLevel</td>
            <td>(you get the idea)</td>
        </tr>
        i++
    }
}