将Sharepoint List与C#进行比较

本文关键字:比较 Sharepoint List | 更新日期: 2023-09-27 18:27:49

我正在尝试比较两个Sharepoint列表。我使用C#程序根据其ID添加、更新和删除项。如果ID不在List1中,则在运行该程序时,我希望从List2中删除ID。我想知道如何在不在GetItemById函数中指定特定编号的情况下删除这些项目?就像这个例子中的

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;
    }
  }
}

将Sharepoint List与C#进行比较

要从第二个列表中删除不在第一个列表中的项目,只需从第一个列表获取所有项目,并根据这些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创建为一个哈希集,在第一个无锡中查找所有项目,然后添加所有这些项目)。

要查找匹配的项,可以使用Dictionary<int, ListItem>,方法是将任一项集放入字典中,ID作为关键字,然后遍历另一个集,查找匹配项。如果要这样做,您可以重用该字典来检查其他两个条件中的一个,从而为您保存一个数据结构:

var firstSiteItemLookup = collListItem.AsEnumerable()
    .ToDictionary(item => item.Id, item => item);
foreach(var item in collListItem2)
{
    ListItem match;
    if(firstSiteItemLookup.TryGetValue(item.Id, out match))
        UpdateItemToMatch(item, match);
    else
        item.DeleteObject();
}
target.ExecuteQuery();

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