将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;
}
}
}
要从第二个列表中删除不在第一个列表中的项目,只需从第一个列表获取所有项目,并根据这些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