我正在尝试获取一些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
}
我收到以下错误:
至少有一个对象必须实现IComparable。
我不确定我该如何解决这个问题。
答案 0 :(得分:4)
请勿按Field
排序,按其值排序。从您的行中删除.Fields
:
var pressChildItems = context
.SelectItems("/sitecore/content" + pressItem.Paths.ContentPath + "/*")
.OrderByDescending(x => x[Sitecore.FieldIDs.Created]);
日期存储为yyyyMMddHHmmss...
字符串,因此按值排序为字符串将产生与从字段获取日期值和使用日期排序完全相同的效果。
答案 1 :(得分:3)
由于看起来你的项目在Bucket中,你应该真正使用ContentSearch
API(并且如果你在前端使用它们会限制结果,因为一个存储桶可能包含数千个项目)。
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);
}
}
}