Search code examples
c#sharepointsharepoint-onlinecaml

caml query not working properly in sharepoint online


I need to get list items which is older than say 7 days and delete them. I tried using caml query and it worked well in sharepoint 2010 but when I tried to use the same in Sharepoint Online, its getting all list items and deleting it regardless of the condition.

    public static bool removeOldEntries(string listName, int offset)
    {
        bool successFlag = true;
        try
        {
            using (var context = new ClientContext(siteURL))
            {
                SecureString password = ToSecureString(pwd);
                context.Credentials = new SharePointOnlineCredentials(userName, password);
                Web web = context.Web;
                var list = context.Web.Lists.GetByTitle(listName);
                if (list != null)
                {
                    CamlQuery camlQuery = new CamlQuery();
                    camlQuery.ViewXml = "<Where><Leq><FieldRef Name='Modified'/><Value Type='DateTime'><Today OffsetDays='-" + offset + "'/></Value></Leq></Where>";
                    ListItemCollection collListItem = list.GetItems(camlQuery);
                    context.Load(collListItem, items => items.Include(
                                         item => item["ID"]));
                    context.ExecuteQuery();
                    if (collListItem.Count > 0)
                    {
                        foreach (ListItem oListItem in collListItem)
                        {
                            ListItem itemToDelete = list.GetItemById(int.Parse(oListItem["ID"].ToString()));
                            itemToDelete.DeleteObject();
                            context.ExecuteQuery();
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            successFlag = false;
        }
        return successFlag;
    }

Thanks in advance for any help.


Solution

  • First try adding a Tag in your view xml

    So it should look like

     camlQuery.ViewXml = "<Query><Where><Leq><FieldRef Name='Modified'/><Value Type='DateTime'><Today OffsetDays='-" + offset + "'/></Value></Leq></Where></Query>";
    

    If it doesn't help try adding a view tag

     camlQuery.ViewXml = "<View><Query><Where><Leq><FieldRef Name='Modified'/><Value Type='DateTime'><Today OffsetDays='-" + offset + "'/></Value></Leq></Where></Query></View>";