使用C#比较Sharepoint List

时间:2015-12-22 17:06:09

标签: c# sharepoint

我正在尝试比较两个Sharepoint列表。我正在使用C#程序根据其ID添加,更新和删除项目。如果List1中不存在ID,则在运行程序时,我想从List2中删除ID。我想知道如何在GetItemById函数中没有指定具体数字的情况下删除这些项目?就像在这个example

中一样
using(ClientContext context = new ClientContext(siteUrl)) {
  //Retrieve list items from list 1 here code here

  using(ClientContext target = new ClientContext(siteUrl2)) {
    foreach(ListItem oListItem2 in collListItem2) {
      int exists = 0;
      foreach(ListItem oListItem in collListItem) {
        if (oListItem2["ID"] == oListItem["ID"]) {
          exists++;
        }
      }
      if (exists == 0) {
        ListItem DeleteItem = list2.GetItemById();
        DeleteItem.DeleteObject();
        target.ExecuteQuery();
      }
      return;
    }
  }
}

2 个答案:

答案 0 :(得分:0)

要从第二个列表中删除不在第一个列表中的项目,只需从第一个列表中获取所有项目,然后根据这些ID过滤第二个列表中的项目。请注意,您可以使用基于哈希的查找来大大提高线性搜索的性能:

var idsFromFirstList = new HashSet<int>(
    collListItem.AsEnumerable()
        .Select(item => item.Id));

var itemsToDelete = collListItem2.AsEnumerable()
    .Where(item => !idsFromFirstList.Contains(item.Id);

foreach(var item in itemsToDelete)
   item.DeleteObject();

target.ExecuteQuery();

请注意,您基本上可以完全相反地找到要添加的项目(在目标中创建项目ID的哈希集到一个集合中,找到第一个中没有的项目,然后添加所有项目那些项目)。

要查找与您匹配的项目,可以使用{em>将 项项集合到字典中,并将ID作为键,然后通过另一个项目查找火柴。如果您 要这样做,您可以重新使用该字典来检查其他两个条件之一,为您保存一个数据结构:

Dictionary<int, ListItem>

答案 1 :(得分:0)

您是否可以使用相同的代码检查collListItem中的ID是否已被修改,然后在collListItem2中更新相同的ID? @Servy