Orchard CMS 按 ID 订购商品

Orchard CMS Order items by ID

我需要列出具有不同 ItemType 的项目。这些类型由不同的部分组成。 默认内容查询 returns 项按 ID 升序排列。我需要按降序获取列表。

IContentQuery<ContentItem>.OrderByDescending<TRecord>() 方法需要通用参数 (TRecord : ContentPartRecord),我应该使用它来构建排序标准。但正如我所说,我的内容类型有不同的部分。

有些项目不包含 CommonPartTitlePart,所以我不能将它们用作参数来获取 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,可能会以多种方式失败。公共部分确实应该在所有内容类型上。