Umbraco Razor c # список уникальных тегов

#c# #razor #umbraco #blogs #umbraco-tags

#c# #razor #umbraco #Блоги #umbraco-теги

Вопрос:

Я пытался создать блог с помощью Umbraco v6 с помощью Razor.

Это мой первый проект Umbraco, поэтому я все еще разбираюсь с вещами, но мне удалось заставить большую часть из них работать так, как я хочу, но я хотел бы перечислить теги в боковом виджете.

Пока у меня есть это —

 @{
    var blogitems = Umbraco.Content("1188").Children.Where("Visible");

    foreach(var blog in blogitems) {
        var tagsplit = blog.tags.Split(',');
        foreach(var tag in tagsplit) {
                <li>                    
                        <a href="/blog/?@tag">@tag</a>
                </li>
        }
    }
}
 

Проблема в том, что в этом списке перечислены все теги, дублирующие многие из них. Я пытался использовать .Отличается от переменной tagsplit, которая просто возвращает ошибку.

Есть идеи?

Ответ №1:

.Distinct() должно сработать, но поскольку это не так, быстрое и грязное решение:

 @{
    var blogitems = Umbraco.Content("1188").Children.Where("Visible");

    foreach(var blog in blogitems) {
        var tagsplit = blog.tags.Split(',');
        var usedTags=new List<string>();
        foreach(var tag in tagsplit) {
            if(!usedTags.Contains(tag)){
                <li>                    
                        <a href="/blog/?@tag">@tag</a>
                </li>
            }
            usedTags.Add(tag);
        }
    }
}
 

Ответ №2:

Чтобы получить все теги в Umbraco:

 Umbraco.TagQuery.GetAllContentTags().OrderBy(t => t.Text)
 

Причина, по которой ваш запрос выдает дубликаты, заключается в том, что элементы вашего блога имеют одинаковые теги, и вы дублируете их в неправильном месте.

 var tagList = Umbraco.Content(1188).Children
    .Where("Visible")
    .SelectMany( c => c.tags.Split(',') )
    .Distinct()
    .OrderBy( x => x )
 

предоставит вам хороший упорядоченный список всех тегов из всего вашего контента…