0

我有一个plannerTaskDetails其中有一个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.KeyValuePair2[System.String,Microsoft.Graph.PlannerChecklistItem]]”的对象转换为类型“Microsoft.Graph.PlannerChecklistItems”。

从 ChecklistItem 中删除最旧元素的正确方法是什么?

更新:首先我plannerTask从服务器检索一个。然后我从中得到详细信息plannerTaskoldDetails对象也是如此plannertaskdetailshttps://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不是完整列表,它只包含必须添加的记录,我不知道如何在该请求中指定一个记录必须是删除。

4

0 回答 0