I am trying to get Id list like this:

Set<Id> idSet;
idSet = [SELECT Id FROM Account LIMIT 1];

But getting this:

Illegal assignment from List<Account> to Set<Id>

I need to do this to add id:

Set<Id> idSet = new Set<Id>();
List<Account> accountList = [SELECT Id FROM Account LIMIT 1];
idSet.add( accountList[0].Id);

But in the above solution, I need to create accountList object just to populate idSet.

Is there any other way to populate set of ids using SOQL query?


You can instead get the results into Map and get the keyset from Map to get Set<Id>

Map has a constructor which takes List<sObject> and creates a instance of Map with ID as Key and sObject as value.

Excerpt from Salesforce Map documentation.


Creates a new instance of the Map class and populates it with the passed-in list of sObject records. The keys are populated with the sObject IDs and the values are the sObjects.

So, you can use the above constructor of Map and can get a set out of it using Map's keyset() method.

Set<Id> idSet = new Map<Id,Account>([SELECT Id FROM Account LIMIT 1]).keyset();

You can also go through Salesforce documentation of Map of sObjects and refer Auto-Populating Map entries from a SOQL query.

  • 1
    +1, good explain. removed my answer – salesforce-sas Aug 3 '19 at 8:23
  • 2
    @salesforce-sas Thanks for correcting the syntax – Vijay Ganji Aug 3 '19 at 8:36

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.