SharePoint: Working with SharePoint Permissions in Client Object model

A user asked the following question:
I have SharePoint List with unique permissions. I need to retrieve the SharePoint Groups which don't have Full Control permissions on the List. Then need to remove them from the List Permissions only.
Since I was free I thought to give it a try. Following is the code:
ClientContext clientContext = new ClientContext("http://demo2010a:90");
Web site = clientContext.Web;
List list = clientContext.Web.Lists.GetByTitle("TestList");
clientContext.Load(site, s => s.RoleDefinitions);
clientContext.ExecuteQuery();
clientContext.Load(list, l => l.HasUniqueRoleAssignments);
clientContext.ExecuteQuery();
List<Principal> groupsToRemove = new List<Principal>();           
if (list.HasUniqueRoleAssignments)
{
    RoleDefinition role = site.RoleDefinitions.GetByName("Full Control");
    clientContext.Load(role);
    clientContext.ExecuteQuery();
    RoleAssignmentCollection oRoleAssignments = list.RoleAssignments;
    clientContext.Load(oRoleAssignments);
    clientContext.ExecuteQuery();
    List<RoleDefinition> rolesToRemove = new List<RoleDefinition>();
    foreach (RoleAssignment oRoleAssignment in oRoleAssignments)
    {
        clientContext.Load(oRoleAssignment, r => r.Member, r => r.RoleDefinitionBindings);
        clientContext.ExecuteQuery();
        Principal oPrincipal = oRoleAssignment.Member;
        if (oPrincipal.PrincipalType == Microsoft.SharePoint.Client.Utilities.PrincipalType.SharePointGroup)
        {
            int roleDefCount = 0;
            foreach (RoleDefinition def in oRoleAssignment.RoleDefinitionBindings)
            {
                if (def.Id == role.Id)
                {                               
                    break;
                }
                else
                {
                    roleDefCount++;
                    if (roleDefCount == oRoleAssignment.RoleDefinitionBindings.Count)
                        groupsToRemove.Add(oPrincipal);
                }
            }                     
        }
    }

    foreach (Principal group in groupsToRemove)
    {
        list.RoleAssignments.GetByPrincipal(group).DeleteObject();
    }

    list.Update();
}
clientContext.ExecuteQuery();
I actually tried to use a simpler statement i.e.
if (!oRoleAssignment.RoleDefinitionBindings.Contains(role))
{
       groupsToRemove.Add(oPrincipal);
}
But it gives follwoing error: Invalid usage of query execution. The query should be executed by using ExecuteQuery method on the client context object. Anyone having idea why this error comes up?

profile for Nadeem Yousuf at SharePoint Stack Exchange, Q&A for SharePoint enthusiasts

+