0

ニュース セクションから最新の 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;
    }
4

1 に答える 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)
于 2012-10-30T17:26:19.920 に答える