排序Ektron内容类型

时间:2013-02-12 04:16:23

标签: asp.net ektron

Ektron 801 SP1

我使用以下代码来获取一些智能表单内容。在获取20行之前,我可以预先排序(使用OrderByField吗?)?我正在排序成员名单,但这是事后的事情,有点无用。我错过了什么?

Criteria<ContentProperty> criteria1 = new Criteria<ContentProperty>();
criteria1.AddFilter(ContentProperty.XmlConfigurationId, CriteriaFilterOperator.EqualTo, MEMBERS_ID);
criteria1.PagingInfo = new PagingInfo(20);

List<ContentType<member>> memberslist = contentTypeManager.GetList(criteria1);

1 个答案:

答案 0 :(得分:1)

我有好消息和坏消息。

首先,好消息。您可以使用Criteria对象按内容属性进行排序,然后拉出20个项目。您将需要使用条件的OrderByField和OrderByDirection属性。

criteria.OrderByField = ContentProperty.DateCreated;
criteria.OrderByDirection = EkEnumeration.OrderByDirection.Descending;

当尝试根据智能表单中的字段订购商品时,会出现坏消息。你可能能够使用IndexSearch API这样做,但由于Ektron 8.0 *仍然依赖于微软的索引服务,我不是那种方法的粉丝,也没有任何代码可以共享。如果您选择走这条路线,前提是使用搜索以正确的顺序返回内容ID,然后按原样使用条件来获取具有这些ID的项目。

只能使用API​​执行的操作是使用Microsoft LINQ在数据加载后对数据进行排序,但为了以正确的顺序获得正确的结果,您必须先加载所有项目(并理想地缓存它们以最小化性能影响)。我正在使用我的一种内容类型作为示例,但您应该明白这一点。

var membersList = new List<SlideBannerType>();
var sortedList = membersList.OrderBy(s => s.EnableAlternateText);
var firstpage = sortedList.Take(20);
var nextpage = sortedList.Skip(20).Take(20);

它并不理想,但对于较小的(数百个,可能是数千个,但不是数十个)数据集,它确实能够很好地工作。

然而,第二点好消息是Ektron使用Microsoft Search Server 8.5及更高版本。这有一个更强大的API,并且在速度和可靠性方面都表现出色。前提实际上将与IndexSearch保持相同,使用Search以正确的顺序获取ID,然后使用ContentManager(或ContentTypeManager)获取项目。我已经多次使用过这种方法,尽管没有特别使用Smart Forms。您的最佳结果将来自升级到8.6和Microsoft Search Server,并使用这两个API一起获取每页数据。在这样做的时候,将高级搜索和过滤器选项与新的搜索API混合在一起实际上几乎是微不足道的。