获取按创建日期排序的 Sitecore 项目

Get Sitecore Items Sorted By Creation Date

我正在尝试获取一些 Sitecore 项目,然后按创建日期对它们进行排序,最新的项目排在第一位。

我有以下代码(片段):

itemID = Constants.BucketIds.NEWS;
Item pressItem = context.GetItem(itemID);
var pressChildItems = context
    .SelectItems("/sitecore/content" + pressItem.Paths.ContentPath + "/*")
    .OrderByDescending(x => x.Fields[Sitecore.FieldIDs.Created]);
foreach (Item childItem in pressChildItems)
{
    // DO SOMETHING
}

我收到以下错误:

At least one object must implement IComparable.

我不确定我应该如何解决这个问题。

不要按 Field 排序,按其值排序。从您的行中删除 .Fields

var pressChildItems = context
    .SelectItems("/sitecore/content" + pressItem.Paths.ContentPath + "/*")
    .OrderByDescending(x => x[Sitecore.FieldIDs.Created]);

日期存储为 yyyyMMddHHmmss... 字符串,因此按字符串值排序与从字段中获取日期值并使用日期排序的效果完全相同。

因为看起来你的项目在 Bucket 中,你应该真正使用 ContentSearch API(如果你在前端使用它们,则限制结果,因为 bucket可能包含数千个项目)。

using Sitecore.ContentSearch;
using Sitecore.ContentSearch.Linq;
using Sitecore.ContentSearch.SearchTypes;
using Sitecore.Data.Items;

List<Item> ResultsItems = new List<Item>();
SitecoreIndexableItem bucket = Context.Database.GetItem(Constants.BucketIds.NEWS);

using (var searchcontext = ContentSearchManager.GetIndex(bucket).CreateSearchContext())
{
    IQueryable<SearchResultItem> searchQuery =
        searchcontext.GetQueryable<SearchResultItem>()
                                        .OrderByDescending(x => x.CreatedDate)
                                        .Take(10);
    SearchResults<SearchResultItem> results = searchQuery.GetResults();

    // fetch the Sitecore Items if you do not want to work with the SearchResultItem
    foreach (var hit in results.Hits)
    {
        Item item = hit.Document.GetItem();
        if (item != null)
        {
            ResultsItems.Add(item);
        }
    }
}