Orchard CMS 按 ID 订购商品
Orchard CMS Order items by ID
我需要列出具有不同 ItemType
的项目。这些类型由不同的部分组成。
默认内容查询 returns 项按 ID 升序排列。我需要按降序获取列表。
IContentQuery<ContentItem>.OrderByDescending<TRecord>()
方法需要通用参数 (TRecord : ContentPartRecord
),我应该使用它来构建排序标准。但正如我所说,我的内容类型有不同的部分。
有些项目不包含 CommonPart
或 TitlePart
,所以我不能将它们用作参数来获取 ContentItem.ID
。
我的实际代码如下所示:
private IContentQuery<ContentItem> GetContentQuery() {
IContentQuery<ContentItem> query = _contentManager.Query(VersionOptions.Latest,
Manager.DocConfig.Keys.ToArray());
if (Manager != null) {
switch (Manager.SortBy) {
case SortOrder.Id: return query;
// return query.OrderByDescending<CommonPartRecord>(cpr => cpr.Id);
case SortOrder.Published :
return query.OrderByDescending<CommonPartRecord>(cpr => cpr.PublishedUtc);
case SortOrder.TitlePart :
return query.OrderBy<TitlePartRecord>(tp => tp.Title);
case SortOrder.Custom :
var sf = Manager.SortFunc;
return (sf == null) ? query : sf(query);
}
}
return query;
}
可能吗?
公共部分的创建日期是按创建日期排序的正确方法。使用 id 是一种 hack,可能会以多种方式失败。公共部分确实应该在所有内容类型上。
我需要列出具有不同 ItemType
的项目。这些类型由不同的部分组成。
默认内容查询 returns 项按 ID 升序排列。我需要按降序获取列表。
IContentQuery<ContentItem>.OrderByDescending<TRecord>()
方法需要通用参数 (TRecord : ContentPartRecord
),我应该使用它来构建排序标准。但正如我所说,我的内容类型有不同的部分。
有些项目不包含 CommonPart
或 TitlePart
,所以我不能将它们用作参数来获取 ContentItem.ID
。
我的实际代码如下所示:
private IContentQuery<ContentItem> GetContentQuery() {
IContentQuery<ContentItem> query = _contentManager.Query(VersionOptions.Latest,
Manager.DocConfig.Keys.ToArray());
if (Manager != null) {
switch (Manager.SortBy) {
case SortOrder.Id: return query;
// return query.OrderByDescending<CommonPartRecord>(cpr => cpr.Id);
case SortOrder.Published :
return query.OrderByDescending<CommonPartRecord>(cpr => cpr.PublishedUtc);
case SortOrder.TitlePart :
return query.OrderBy<TitlePartRecord>(tp => tp.Title);
case SortOrder.Custom :
var sf = Manager.SortFunc;
return (sf == null) ? query : sf(query);
}
}
return query;
}
可能吗?
公共部分的创建日期是按创建日期排序的正确方法。使用 id 是一种 hack,可能会以多种方式失败。公共部分确实应该在所有内容类型上。