如何将 string.join 添加到 foreach 循环
Posted
技术标签:
【中文标题】如何将 string.join 添加到 foreach 循环【英文标题】:How to add string.join to foreach loop 【发布时间】:2021-04-08 02:16:21 【问题描述】:我在视图上显示我的第 i 个产品的类别,但我想添加一个链接并在它们之间放置逗号。
@for (int i = 0; i < Products.Count(); i++)
<tr>
<td>
<span> @Model.Products[i].ProductName </span>
@foreach (var item in Model.Products[i].ProductCategories)
<a href="/home/@item.ItemName"> @item.ItemName, </a>
</td>
</tr>
看起来像这样 => 计算机、技术、桌面,
我想要这个 => 计算机、技术、桌面
我不想在最后一项中使用逗号我可以这样显示,但我不能添加<a href=""></a>
<span>@string.Join(", ", Model.Products[i].ProductCategories.Select(p => p.Category.CategoryName))</span>
【问题讨论】:
您可以在循环之前添加一个设置为 false 的标志,并在输出链接之前的逗号之前对其进行检查,并在循环结束时将其设置为 true。无论如何,我什至会把逗号放在链接之外。 是ItemName
还是CategoryName
?
【参考方案1】:
我认为您可以使用 LINQ 代替 foreach
:
@for (int i = 0; i < Products.Count(); i++)
<tr>
<td>
<span> @Model.Products[i].ProductName </span>
@html.Raw(String.Join(", ", Model.Products[i].ProductCategories.Select(category => $@"<a href=""/home/Html.Encode(category.CategoryName)"">Html.Encode(category.CategoryName)</a>")))
</td>
</tr>
但我不会说这是最棒的方式。此时您可能应该使用Html.ActionLink
之类的东西,而不是手动放入a
标记。
【讨论】:
【参考方案2】:使用蛮力方法……
您是否考虑过使用for
循环而不是foreach
循环?在for
循环内部,如果循环索引j
小于集合计数- 1,则添加逗号。
例如,使用您的代码结构...
@for (int j = 0; j < Model.Products[i].ProductCategories.Count(); j++)
If (j < Model.Products[i].ProductCategories.Count() – 1)
<a href="/home/@item.ItemName"> Model.Products[i].ProductCategories[j].ItemName, </a>
else
<a href="/home/@item.ItemName"> Model.Products[i].ProductCategories[j].ItemName</a>
【讨论】:
多次调用Count()
可能会很糟糕,具体取决于 ProductCategories
的实际情况。
@NetMage ...我对这里使用的语言不太熟悉,因为它似乎不是 C#。你说的是真的,但可以用变量来修复。但我的答案也缺少j
索引@item.ItemName
需要索引到j
....我可能会删除答案。【参考方案3】:
也许你可以做这样的事情。无法对其进行测试,但应该抓住要点。
<span>
@string.Join(
", </a>",
Model.Products[i]
.ProductCategories
.Select(
p => "<a href=\"" + p.Category.CategoryName + "\""))
</a>
</span>
【讨论】:
以上是关于如何将 string.join 添加到 foreach 循环的主要内容,如果未能解决你的问题,请参考以下文章
string.Join in Linq to Entity queries