循环多个项目但只循环唯一的项目
Looping multiple items but only loop unique ones
我目前有一个循环,可以循环从 Umbraco 动态加载的不同标签。
这是我循环的结果:
循环代码:
@{ var Artikelen = Model.Content.Children.Where(NieuwsTemplate => NieuwsTemplate.DocumentTypeAlias == "newsDetail"); }
@foreach (var tag in @MainTag.Children){
foreach (var NewsArticleTags in Artikelen){
var DifferentTags = NewsArticleTags.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags");
foreach(var TagNames in DifferentTags){
if(@TagNames.Name == @tag.Name){
<center><a class="ajaxFilter" data-catId="@tag.Id">@tag.Name</a></center>
}
}
}
}
我决定添加一个 bool,这样它每个只循环 1 个。我显然搞砸了,因为它只循环第一个标签。我应该把 bool 放在哪里,以便它只循环每个标签一次? 1 "Gamification" 1 "VR / AR" 和 1 "Leren Programmeren"
这是添加了 bool 的代码:
@{ var Artikelen = Model.Content.Children.Where(NieuwsTemplate => NieuwsTemplate.DocumentTypeAlias == "newsDetail");
bool ShowTag = false;}
@foreach (var tag in @MainTag.Children){
foreach (var NewsArticleTags in Artikelen){
var DifferentTags = NewsArticleTags.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags");
foreach(var TagNames in DifferentTags){
if(@TagNames.Name == @tag.Name && !ShowTag){
<center><a class="ajaxFilter" data-catId="@tag.Id">@tag.Name</a></center>
ShowTag = true;
}
}
}
}
其中显示:
谁能帮我解决这个问题?
编辑@DZL
@{ var Artikelen = Model.Content.Children.Where(NieuwsTemplate => NieuwsTemplate.DocumentTypeAlias == "newsDetail");
bool ShowTag = false;}
@foreach (var tag in @MainTag.Children){
foreach (var NewsArticleTags in Artikelen){
@*var DifferentTags = NewsArticleTags.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags");*@
var distinctTags = Artikelen.SelectMany(a => a.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags")).Select(DifferentTag => DifferentTag.Name).Distinct();
foreach(var TagNames in distinctTags){
if(TagNames == @tag.Name)
{
<center><a class="ajaxFilter" data-catId="@tag.Id">@tag.Name</a></center>
ShowTag = true;
}
}
}
}
修复它的最终代码
@{
var Artikelen = Model.Content
.Children
.Where(c => c.DocumentTypeAlias == "newsDetail");
var distinctTags = Artikelen
.SelectMany(a => a.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags"))
.GroupBy(node => node.Name)
.Select(group => group.First());
}
@foreach (var DifferentTags in MainTag.Children){
foreach (var tag in distinctTags)
{
if(DifferentTags.Name == tag.Name)
{
<center>
<a class="ajaxFilter" data-catId="@tag.Id">@tag.Name</a>
</center>
}
}
}
你应该使用这样的东西:
@{
var Artikelen = Model.Content
.Children
.Where(c => c.DocumentTypeAlias == "newsDetail");
var distinctTags = Artikelen
.SelectMany(a => a.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags"))
.GroupBy(node => node.Name)
.Select(group => group.First());
}
@foreach (var tag in distinctTags)
{
<center>
<a class="ajaxFilter" data-catId="@tag.Id">@tag.Name</a>
</center>
}
保存最后一个标签怎么样?
@{ var Artikelen = Model.Content.Children.Where(NieuwsTemplate =>
NieuwsTemplate.DocumentTypeAlias == "newsDetail");
var lastTag = null;}
@foreach (var tag in @MainTag.Children)
{
foreach (var NewsArticleTags in Artikelen)
{
var DifferentTags = NewsArticleTags.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags");
foreach(var TagNames in DifferentTags)
{
if(@TagNames.Name == @tag.Name && @TagNames.Name != @lastTag.Name)
{
<center><a class="ajaxFilter" data-catId="@tag.Id">@tag.Name</a></center>
@lastTag.Name = @TagNames.Name
}
}
}
}
抱歉,我不知道如何使用这些标签 属性,但我想你可以明白我要解释的内容
我目前有一个循环,可以循环从 Umbraco 动态加载的不同标签。
这是我循环的结果:
循环代码:
@{ var Artikelen = Model.Content.Children.Where(NieuwsTemplate => NieuwsTemplate.DocumentTypeAlias == "newsDetail"); }
@foreach (var tag in @MainTag.Children){
foreach (var NewsArticleTags in Artikelen){
var DifferentTags = NewsArticleTags.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags");
foreach(var TagNames in DifferentTags){
if(@TagNames.Name == @tag.Name){
<center><a class="ajaxFilter" data-catId="@tag.Id">@tag.Name</a></center>
}
}
}
}
我决定添加一个 bool,这样它每个只循环 1 个。我显然搞砸了,因为它只循环第一个标签。我应该把 bool 放在哪里,以便它只循环每个标签一次? 1 "Gamification" 1 "VR / AR" 和 1 "Leren Programmeren"
这是添加了 bool 的代码:
@{ var Artikelen = Model.Content.Children.Where(NieuwsTemplate => NieuwsTemplate.DocumentTypeAlias == "newsDetail");
bool ShowTag = false;}
@foreach (var tag in @MainTag.Children){
foreach (var NewsArticleTags in Artikelen){
var DifferentTags = NewsArticleTags.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags");
foreach(var TagNames in DifferentTags){
if(@TagNames.Name == @tag.Name && !ShowTag){
<center><a class="ajaxFilter" data-catId="@tag.Id">@tag.Name</a></center>
ShowTag = true;
}
}
}
}
其中显示:
谁能帮我解决这个问题?
编辑@DZL
@{ var Artikelen = Model.Content.Children.Where(NieuwsTemplate => NieuwsTemplate.DocumentTypeAlias == "newsDetail");
bool ShowTag = false;}
@foreach (var tag in @MainTag.Children){
foreach (var NewsArticleTags in Artikelen){
@*var DifferentTags = NewsArticleTags.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags");*@
var distinctTags = Artikelen.SelectMany(a => a.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags")).Select(DifferentTag => DifferentTag.Name).Distinct();
foreach(var TagNames in distinctTags){
if(TagNames == @tag.Name)
{
<center><a class="ajaxFilter" data-catId="@tag.Id">@tag.Name</a></center>
ShowTag = true;
}
}
}
}
修复它的最终代码
@{
var Artikelen = Model.Content
.Children
.Where(c => c.DocumentTypeAlias == "newsDetail");
var distinctTags = Artikelen
.SelectMany(a => a.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags"))
.GroupBy(node => node.Name)
.Select(group => group.First());
}
@foreach (var DifferentTags in MainTag.Children){
foreach (var tag in distinctTags)
{
if(DifferentTags.Name == tag.Name)
{
<center>
<a class="ajaxFilter" data-catId="@tag.Id">@tag.Name</a>
</center>
}
}
}
你应该使用这样的东西:
@{
var Artikelen = Model.Content
.Children
.Where(c => c.DocumentTypeAlias == "newsDetail");
var distinctTags = Artikelen
.SelectMany(a => a.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags"))
.GroupBy(node => node.Name)
.Select(group => group.First());
}
@foreach (var tag in distinctTags)
{
<center>
<a class="ajaxFilter" data-catId="@tag.Id">@tag.Name</a>
</center>
}
保存最后一个标签怎么样?
@{ var Artikelen = Model.Content.Children.Where(NieuwsTemplate =>
NieuwsTemplate.DocumentTypeAlias == "newsDetail");
var lastTag = null;}
@foreach (var tag in @MainTag.Children)
{
foreach (var NewsArticleTags in Artikelen)
{
var DifferentTags = NewsArticleTags.GetPropertyValue<IEnumerable<IPublishedContent>>("themeTags");
foreach(var TagNames in DifferentTags)
{
if(@TagNames.Name == @tag.Name && @TagNames.Name != @lastTag.Name)
{
<center><a class="ajaxFilter" data-catId="@tag.Id">@tag.Name</a></center>
@lastTag.Name = @TagNames.Name
}
}
}
}
抱歉,我不知道如何使用这些标签 属性,但我想你可以明白我要解释的内容