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>
}
以下有效 - 非常感谢所有回复!
{ 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++
}
}
我有一个 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>
}
以下有效 - 非常感谢所有回复!
{ 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++
}
}