我有一个plannerTask
,Details
其中有一个CheckList
. 我用它以编程方式插入CheckListItems
其中,当插入或检索任务时,它就像一个魅力。
当我要插入一个新CheckListItem
的并且CheckList
已经有 20 个项目时,我的问题就来了。它返回一个MaximumChecklistItemsOnTask
(因为禁止在检查列表中插入超过 20 个项目)。
解决方案可能是删除最旧的项目,但我无法做到。我试过这个:
var elementToRemove = oldDetails.Checklist.Where(c => c.Value.IsChecked).OrderBy(c => c.Value.LastModifiedDateTime).First();
oldDetails.Checklist = oldDetails.Checklist.Where(c => c.Value.LastModifiedDateTime <> elementToRemove.Value.LastModifiedDateTime);
但它在第二行引发了一个转换错误:
无法将类型为“WhereEnumerableIterator
1[System.Collections.Generic.KeyValuePair
2[System.String,Microsoft.Graph.PlannerChecklistItem]]”的对象转换为类型“Microsoft.Graph.PlannerChecklistItems”。
从 ChecklistItem 中删除最旧元素的正确方法是什么?
更新:首先我plannerTask
从服务器检索一个。然后我从中得到详细信息plannerTask
。oldDetails
对象也是如此plannertaskdetails
(https://docs.microsoft.com/en-us/graph/api/resources/plannertaskdetails?view=graph-rest-1.0)。在plannertaskdetails
对象(oldDetails)中,我有plannerchecklistitems
对象(oldDetails.Checklist):https ://docs.microsoft.com/en-us/graph/api/resources/plannerchecklistitems?view=graph-rest-1.0 。如果plannerchecklistitems
只是一个列表,它会像 一样简单list.Remove(item)
,但它不是一个普通的列表,这就是我无法删除该项目的原因。
更新 2: 我发现这种方法可以从 oldDetails 中删除该项目:
oldDetails.Checklist.AdditionalData.Remove(elementToRemove.Key)
但是,我将更改发送到服务器的方式是这样的:
await graphClient.Planner.Tasks(plannerTask.Id).Details.Request().Header("If-Match", oldDetails.GetEtag).UpdateAsync(newDetails)
因为它是一个 PATCH 请求(不是一个 PUT 请求),所以我只有在newDetails
已更改的记录中,即新记录。我怎么能在那里指定一条记录已从列表中删除?抱歉,如果我的英语不够好,无法正确表达自己,但我的意思是这newDetails
不是完整列表,它只包含必须添加的记录,我不知道如何在该请求中指定一个记录必须是删除。