I can't get this for loop to work:

global void execute(Database.BatchableContext bc, List<Account> accounts){
    List<Account> acctsToUpdate = new List<Account>();
    List<Contact> allContacts = [SELECT Id, Name FROM Contact];
    List<Interaction__c> allInteractions = [SELECT *fields* FROM Interaction__c];

    List<Interaction__c> relInterations = new List<Interaction__c>();for(Account act : accounts){
        for(Interaction__c relInt : allInteractions) {
            if((ID)relInt.AccountID__c = act.Id){

I get the error

Expression cannot be assigned

If I remove the (ID) I get

Condition expression must be of type Boolean: Id

How can I solve this problem? Could it be because I am using Database.Batchable and the list accounts is void? I don't totally understand the void vs static in this case.

As an aside, I tried act.contains(relInt.AccountID__c) and it says that method does not exist, which seems to be the opposite of what the documentation says, right?


Replace = with ==, single equals is for assignment and double for comparison.

|improve this answer|||||
  • 3
    @Chance You need to be careful with that syntax, too, because it can cause subtle bugs when you least expect it: Boolean someFlag; if(someFlag = true) {...} will compile, and always execute. It's a nice-to-have, so I understand why it's not forbidden by the syntax. Just be aware of this feature and you'll be fine. – sfdcfox Jan 22 '18 at 18:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.