code Snippet #1 is the correct answer as you won’t end up pulling duplicate contacts into the contact list
Code Snippet #1:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
List<Opportunity> OpportunityList = [select id, accountId from Opportunity]; List<Contact> contactList = new List<Contact>(); Set<Id> accountIds = new Set<Id>(); for(Opportunity o : opportunityList) { accountIds.add(o.AccountId); } for(Account a : [SELECT Id, (SELECT Id FROM Contacts) FROM Account WHERE Id IN :accountIds]) { contactList.addAll(a.Contacts); } System.debug(' ContactList Size ' + contactList.size()); |
Code Snippet #2 : Issue: Coding Error : List defined incorrectly
1 2 3 4 5 6 7 8 9 10 |
List<Opportunity> OpportunityList = [select id, accountId from Opportunity]; List<Contact> contactList = new List()<Contact>; Set<Id> accountIds = new Set<Id>(); for(Opportunity o : opportunityList) { contactIds.add(o.ContactId); } for(Contact c : [SELECT Id FROM Contact WHERE Id IN :contactIds]){ contactList.add(c); } |
Code Snippet #3 :
1 2 3 4 5 6 7 8 9 10 11 |
List<Opportunity> OpportunityList = [select id, accountId from Opportunity]; System.debug(' Opportunity List ' + OpportunityList); List<Contact> contactList = new List<Contact>(); for(Opportunity o : opportunityList) { System.debug(' Opportunity Account Id ' + o.accountId ); if(o.accountId != null ) { Account a = [SELECT Id, (SELECT Id FROM Contacts) FROM Account WHERE Id = :o.AccountId]; contactList.addAll(a.Contacts); } } System.debug(' Size of Contact List ' + contactList.size()); |
Code Snippet #4 : Issue: Coding error : you can’t read a list directly from OpportunityList
1 2 3 4 5 |
List<Opportunity> OpportunityList = [select id, accountId from Opportunity]; List<Contact> contactList = new List<Contact>(); for(Contact c : [SELECT Id FROM Contact WHERE AccountId IN :opportunityList.accountId]){ contactList.add(c); } |