Umbraco Razor Orderby定制财产

时间:2017-03-21 20:03:01

标签: asp.net-mvc razor umbraco partial-views

我正在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>

}

1 个答案:

答案 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();