分页获取SharePoint列表项

在处理SharePoint列表数据时,如果需要对查询结果进行排序和筛选,并且希望以分页的方式获取数据,那么编写一个高效的分页检索类就显得尤为重要。本文将介绍如何使用C#创建一个名为SPPagedListItemsRetriever的类,该类可以指定SharePoint列表和查询条件,然后分页获取列表项。

类的定义和构造函数

首先,需要定义SPPagedListItemsRetriever类,并在构造函数中初始化需要的SharePoint列表和查询对象。

public class SPPagedListItemsRetriever { private SPQuery _query; private SPList _list; private const int MaxRowLimit = 2000; private static SPListItemCollectionPosition _emptySPListItemCollectionPosition = new SPListItemCollectionPosition(string.Empty); public SPPagedListItemsRetriever(SPList list, SPQuery query) { _list = list; _query = query; } // ... }

获取分页列表项的方法

接下来,定义两个公共方法:GetItems用于获取指定范围内的列表项,GetTotalItemsCount用于获取总项数。

需要注意的是,GetItems方法在获取指定起始索引的项时,会先获取前199项然后丢弃,再开始获取所需的项。这种做法虽然可以工作,但效率不高。

public SPListItem[] GetItems(int? startIndex, int? maxRowsCount) { SPListItemCollectionPosition listItemCollectionPosition = null; uint actualStartIndex = startIndex.HasValue ? (uint)startIndex.Value : 0; // ... }

获取总项数的方法

GetTotalItemsCount方法通过执行一个查询,返回查询结果的总数。这个方法同样需要优化,以避免不必要的数据加载。

public int GetTotalItemsCount() { SPQuery query = new SPQuery(); query.ViewFields = ""; query.Query = _query.Query; // ... }

优化和改进

为了提高效率,可以对GetItemsGetTotalItemsCount方法进行优化。例如,可以避免在获取起始索引项时加载不必要的数据,或者在获取总项数时只查询ID字段。

public SPListItem[] GetItems(int? startIndex, int? maxRowsCount) { // ... if (actualStartIndex > 0) { SPQuery dummyQuery = new SPQuery(); dummyQuery.ViewFields = ""; dummyQuery.Query = _query.Query; if (null != _query.Folder) dummyQuery.Folder = _query.Folder; int gotDummyItems = 0; do { dummyQuery.RowLimit = Math.Min((uint)(actualStartIndex - gotDummyItems), MaxRowLimit); if (null == listItemCollectionPosition) listItemCollectionPosition = _emptySPListItemCollectionPosition; dummyQuery.ListItemCollectionPosition = listItemCollectionPosition; SPListItemCollection items = _list.GetItems(dummyQuery); gotDummyItems += items.Count; listItemCollectionPosition = items.ListItemCollectionPosition; } while (gotDummyItems < actualStartIndex && listItemCollectionPosition != null); } // ... }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485