我正在尝试比较两个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;
}
}
}
答案 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