循环多个项目但只循环唯一的项目

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

抱歉,我不知道如何使用这些标签 属性,但我想你可以明白我要解释的内容