You should use && instead of & for joining two logical conditions. So, your code should look like something this: List<Profile> PROFILE = [SELECT Id, Name FROM Profile WHERE Id=:userinfo.getProfileId() LIMIT 1]; Public String MyProflieName = PROFILE[0].Name; List<User> Use = new List<User>([SELECT Phone, Id FROM User WHERE Id = : UserInfo.getUserId()]); for(Case c:Trigger.New) { for(User u: Use) { System.Debug( (c.RecordType.Name='Client Service') &&((c.Categories__c !='DCS Client Services')||(c.Categories__c !='DCS Technical Support')) &&((c.Account_Segmentation__c != 'Z2')||(c.Account_Segmentation__c != 'Z3')||(c.Account_Segmentation__c != 'Z4')||(c.Account_Segmentation__c !=' Z5')||(c.Account_Segmentation__c != 'D1')) &&((MyProflieName=='DCS Client Services')||(MyProflieName=='DCS Technical Support')) &&((c.Origin='Email')||(c.Origin='Phone')||(c.Origin='Chat')||(c.Origin='Internal')) &&(!((u.FirstName='PBI')&(u.LastName='Default'))) ); } } }