我正在Umbraco v6.2.4中使用部分视图来提取相关文章的列表。下面的脚本运行完美,并使用“Refactored.Umbraco.MVCExtensions”来提取文章的视图计数。到目前为止一直这么好,但我想通过最受欢迎的文章,即基于视图计数来对文章列表进行排序/排序。但是,视图计数不是Umbraco模型的一部分,所以我不知道如何基于此命令/排序列表,或者是否有其他方法可以做到这一点?
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@using Refactored.UmbracoViewCounter
@{
var articles = Model.Content.AncestorOrSelf(4).Children.Where(x => x.IsVisible()).OrderBy("articleCategory, articleDate desc");
int pagerank = 1;
string elementId;
<div>
<p class="h3">Most Popular</p>
@foreach (var item in articles.Take(6))
{
elementId = "content_" + pagerank.ToString();
<div class="items @elementId">
<span class="pagerank">@pagerank</span>
<a href="@item.Url">
<p>@(item.GetPropertyValue<string>("title"))</p>
</a>
<span class="views-counter"> @ViewCount.GetViewCount(item.Id, category: "articles", increment: false)</span>
</div>
pagerank = pagerank + 1;
}
</div>
}
答案 0 :(得分:0)
你可以使用Linq组合两个列表然后排序,如下所示,我假设你使用petapoco进行查看计数表,我无法测试代码,因为我没有你的自定义数据表,但我认为你可以在这里向正确的方向移动:
var db = ApplicationContext.DatabaseContext.Database;
var sql = new Sql()
.Select("*")
.From<RefViewCount>(new SqlServerSyntaxProvider());
var refViewCountList = db.Query<RefViewCount>(sql);
var articles = Model.Content.AncestorOrSelf(4).Children.Where(x => x.IsVisible()).Select(r => new {Item = r, ViewCount = refViewCountList.Where(v => v.nodeId == r.Id).Select(v => v.count).SingleOrDefault()}).OrderBy(r => r.ViewCount).ToList();