尝试按 C# 中返回的列表上的日期排序(Umbraco 4.8.1)

问题描述 投票:0回答:1

我正在尝试从新闻部分提取最新的 5 篇文章,然后按文章日期对它们进行排序。

我已成功获取 5 篇文章并正常显示它们,但

OrderBy
未按预期工作。我需要通过名为“NewsDate”的节点上的属性对它们进行排序,该属性是一个日期选择器。

protected void Page_Load(object sender, EventArgs e)
    {
        var currentNode = Node.GetCurrent();
        var nodeTypeAlias = currentNode.NodeTypeAlias;

        if (nodeTypeAlias == "NewsMasterPage")
        {
            var nodes = FindChildren(currentNode, t => t.NodeTypeAlias.Equals("NewsArticle"));
            var nodesOutput = nodes.OrderBy(n => n.GetProperty("NewsDate"));
                            
            newsRepeater.DataSource = nodesOutput;
            newsRepeater.DataBind();
        }
        
    }

    private static List<Node> FindChildren(Node currentNode, Func<Node, bool> predicate)
    {
        List<Node> result = new List<Node>();

        var nodes = currentNode
            .Children
            .OfType<Node>()
            .Where(predicate).Take(4);
        if (nodes.Count() != 0)
            result.AddRange(nodes);

        foreach (var child in currentNode.Children.OfType<Node>())
        {
            nodes = FindChildren(child, predicate);
            if (nodes.Count() != 0)
                result.AddRange(nodes);
        }
        return result;
    }
c# .net linq umbraco
1个回答
2
投票

我假设这是因为

GetProperty(string)
返回一个对象,而不是实际的
DateTime
实例。我相信,如果您创建一个过渡投影,然后像这样稍后选择元素,您应该能够进行排序:

nodes.Select(x => new { Node = x, NewsDate = /* Convert x.GetProperty("NewsDate") to DateTime */ })
     .OrderBy(x => x.NewsDate)
     .Select(x => x.Node)
© www.soinside.com 2019 - 2024. All rights reserved.