c#SharePoint将多个ListItemCollection合并为一个

时间:2017-01-17 08:49:34

标签: c# sharepoint caml sharepoint-online

我在Sharepoint在线网站上有一个包含超过5000个项目的列表。在列表达到5000个项目之前,我已使用以下代码段获取所有项目:

var camlquery = new CamlQuery();
camlquery.ViewXml = @"<View Scope='RecursiveAll'>
                        <ViewFields>
                            <FieldRef Name='OppId' />
                        </ViewFields>
                        <Query>
                            <QueryOptions>
                                <ViewAttributes Scope='Recursive' />
                            </QueryOptions>
                        </Query>
                    </View>";
ListItemCollection listItems = _currentList.GetItems(camlquery);
_clientContext.Load(listItems, items => items.Include(item => item["OppId"], item => item.Id));
_clientContext.ExecuteQuery();

现在我遇到了这个令人讨厌的情况,我有超过5000件物品。通常这不是问题。我之前在powershell中通过翻阅结果来管理它。

在这种情况下,我使用Microsoft.SharePoint.Client.ListItemCollection并使用函数GetItems(camlquery)将项目添加到集合中。当我尝试添加其他“&#39;页面”中的其他商品时似乎没有用。

我尝试遍历这些项目并将它们添加到ListItemCollection中。但是没有可用的添加或插入功能。

foreach (ListItem myListItem in listItems2)
{
     listItems.Add(myListItem);         
}

我需要返回一个包含超过5000个项目的ListItemCollection。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

将listItems和listItems2转换为Datatable,然后将datatable1的行复制到datatable2

foreach (DataRow dr in dataTable1.Rows) {
    dataTable2.Rows.Add(dr);

}

答案 1 :(得分:0)

我找到了一种方法来使用IList<ListItem>ListItem收集ListItemCollection类型的所有对象来获取所有项目。

IList<ListItem> listItemsAll = new List<ListItem>();
// Loop through pages of list items
//... Getting all items

foreach (ListItem myListItem in listItems)
{
    listItemsAll.Add(myListItem);
}
// End Loop
return listItemsAll;

在这种情况下,我返回一个List,但我只需要将列表类型从ListItemCollection更改为IList<ListItem>。 Everythings按预期工作。