C# For循环使用带有多个标记的Umbraco标记查询来获取相关节点/项目

C# For循环使用带有多个标记的Umbraco标记查询来获取相关节点/项目,c#,for-loop,foreach,umbraco,umbraco7,C#,For Loop,Foreach,Umbraco,Umbraco7,我试图获取特定文档类型的所有项,这些项的标记与当前节点/项上的一个标记相同 我可以通过以下方式明确声明one标记的所有相关项: var taggedContent = Umbraco.TagQuery.GetContentByTag("Tag1"); var taggedItems = taggedContent.Where(c => c.IsDocumentType("SpecificPageType", true) && c.IsVisible()); 但是,由于Ge

我试图获取特定文档类型的所有项,这些项的标记与当前节点/项上的一个标记相同

我可以通过以下方式明确声明one标记的所有相关项:

var taggedContent = Umbraco.TagQuery.GetContentByTag("Tag1");
var taggedItems = taggedContent.Where(c => c.IsDocumentType("SpecificPageType", true) && c.IsVisible());
但是,由于
GetContentByTag
只接受一个参数,因此我不确定如何构造foreach循环以使用我的标记列表

我想创建一个foreach循环,该循环生成一个相关项列表,该列表组合了每个标记中的所有相关项,这样我就可以使用
.OrderBy(“Id降序”)
对其进行排序

以下是我当前的静态代码:

var tags = Umbraco.TagQuery.GetTagsForEntity(Node.getCurrentNodeId()).DistinctBy(t => t.Text).OrderBy(t => t.Text);
var taggedContent = Umbraco.TagQuery.GetContentByTag("Tag1");
var taggedItems = taggedContent.Where(c => c.IsDocumentType("SpecificPageType", true) && c.IsVisible());
foreach (var relatedItem in taggedItems)
{
<a href="@relatedItem.Url">
    @{
        var pageTitle = relatedItem.GetPropertyValue("pageTitle").ToString();
    }
    <h6>@Umbraco.Truncate(pageTitle, 80, true)</h6>
</a>
}
var tags=Umbraco.TagQuery.GetTagsForEntity(Node.getCurrentNodeId()).DistinctBy(t=>t.Text).OrderBy(t=>t.Text);
var taggedContent=Umbraco.TagQuery.GetContentByTag(“Tag1”);
var taggedItems=taggedContent.Where(c=>c.IsDocumentType(“SpecificPageType”,true)和&c.IsVisible();
foreach(taggedItems中的var relatedItem)
{
}
我构建循环的尝试失败:

var tags = Umbraco.TagQuery.GetTagsForEntity(Node.getCurrentNodeId()).DistinctBy(t => t.Text).OrderBy(t => t.Text);
var listIWant = new List<IPublishedContent>();

foreach (var tag in tags)
{
var taggedContent = Umbraco.TagQuery.GetContentByTag(tag.ToString());
var taggedItems = taggedContent.Where(c => c.IsDocumentType("SpecificPageType", true) && c.IsVisible());

//How to modify the list here?

}

//OR

var tagsCount = tags.Count();
for (var i = 0; i < tagsCount; i++)
{
var taggedContent = Umbraco.TagQuery.GetContentByTag(tag.ToString());
var taggedItems = taggedContent.Where(c => c.IsDocumentType("SpecificPageType", true) && c.IsVisible());

//How to modify the list here?

}
// Modified the list to contain everything in the loop above, now order it
var orderedList = listIWant.OrderBy("Id descending");
// Create links from ordered list
foreach (var relatedItem in orderedList)
{
<a href="@relatedItem.Url">
    @{
        var pageTitle = relatedItem.GetPropertyValue("pageTitle").ToString();
    }
    <h6>@Umbraco.Truncate(pageTitle, 80, true)</h6>
</a>
}
var tags=Umbraco.TagQuery.GetTagsForEntity(Node.getCurrentNodeId()).DistinctBy(t=>t.Text).OrderBy(t=>t.Text);
var listIWant=新列表();
foreach(标签中的var标签)
{
var taggedContent=Umbraco.TagQuery.GetContentByTag(tag.ToString());
var taggedItems=taggedContent.Where(c=>c.IsDocumentType(“SpecificPageType”,true)和&c.IsVisible();
//如何在此处修改列表?
}
//或
var tagscont=tags.Count();
对于(变量i=0;ic.IsDocumentType(“SpecificPageType”,true)和&c.IsVisible();
//如何在此处修改列表?
}
//修改列表以包含上面循环中的所有内容,现在对其进行排序
var orderedList=listIWant.OrderBy(“Id递减”);
//从有序列表创建链接
foreach(orderedList中的var relatedItem)
{
}

感谢您的帮助,如果我不清楚或需要进一步的信息,请告诉我。

我能够正确地构造foreach循环来创建列表,然后处理列表以删除重复项,并根据需要进行排序。希望这能帮助其他人。我怀疑这是最有效的方法,但它是有效的

代码:

//获取我所在的当前项目的标记
var tags=Umbraco.TagQuery.GetTagsForEntity(Node.getCurrentNodeId()).DistinctBy(t=>t.Text).OrderBy(t=>t.Text);
//在foreach循环中创建要添加到的空白列表
var combinedList=新列表();
//按标签获取每个标签的相关内容,添加到列表中
foreach(标签中的var标签)
{
var tagString=tag.Text;
var taggedContent=Umbraco.TagQuery.GetContentByTag(tagString);
combinedList.AddRange(taggedContent);
}
//筛选列表以仅显示创意项目,按最新顺序排序,然后删除重复项
var taggedItems=combinedList.Where(c=>c.IsDocumentType(“NewsPage”,true)和&c.IsVisible()&&c.Id!=CurrentPage.Id).OrderBy(“Id descending”).DistinctBy(x=>x.Id).Take(8);
if(taggedItems.Any())
{
foreach(taggedItems中的var relatedItem)
{
}
    // Get tags of current item I'm on
    var tags = Umbraco.TagQuery.GetTagsForEntity(Node.getCurrentNodeId()).DistinctBy(t => t.Text).OrderBy(t => t.Text);

    // Create blank list to add to in foreach loop
    var combinedList = new List<IPublishedContent>();

    // Get related content by tag for each tag, add to the list
    foreach (var tag in tags)
    {
        var tagString = tag.Text;
        var taggedContent = Umbraco.TagQuery.GetContentByTag(tagString);
        combinedList.AddRange(taggedContent);
    }

    // Filter list to only idea items, order by latest, then remove duplicates
    var taggedItems = combinedList.Where(c => c.IsDocumentType("NewsPage", true) && c.IsVisible() && c.Id != CurrentPage.Id).OrderBy("Id descending").DistinctBy(x => x.Id).Take(8);

    if (taggedItems.Any())
    {
        foreach (var relatedItem in taggedItems)
        {
        <a href="@relatedItem.Url">
        @{
            var pageTitle = relatedItem.GetPropertyValue("pageTitle").ToString();
        }
        <h6>@Umbraco.Truncate(pageTitle, 80, true)</h6>
    </a>
    }