[SalesForce] SOQL query for Multiselect picklist

Hello I'm trying to use string in SOQL query where clause for multiselect picklist.

I need to get records of CustObj__c where Multipicklist__c fild have 'abc' or 'xyz' values.

String str = '\'abc\',\'xyz\'';
for(CustObj__c cust : [Select Id, Name, Multipicklist__c FROM CustObj__c WHERE Multipicklist INCLUDES (:str)]{
somelogic
}

However I get no records.
What is wrong in this query?

Ok I tried using list too, here I'm getting all record of all Public Groups where user is assign. and saving those Public Groups names in

List<String> groupIds = new List<String>();
List<String> groupNames = new List<String>();

for(GroupMember gm :[SELECT Id,GroupId,UserOrGroupId FROM GroupMember WHERE UserOrGroupId = :userIds[0]]){
            groupIds.add(gm.GroupId);
        }
        for(Group g :[SELECT ID,Name FROM Group WHERE Id IN :groupIds]){
            groupNames.add('\'' + g.Name + '\'');
        }

for(CustObj__c cust : [Select Id, Name, Multipicklist__c FROM CustObj__c WHERE Multipicklist INCLUDES (:groupNames)]){
somelogic
}

It still not working

I get error in Dev console : Invalid bind expression type of List for column of type String

Best Answer

Got my answer from this question thanks to @Anmol Kumar.

https://salesforce.stackexchange.com/a/301892/60388

Answer is below :

You need to create a query string first and then pass it to Database.query

Example

for(Group g :[SELECT ID,Name FROM Group WHERE Id IN :groupIds]) {
    groupNames.add(g.Name);
}

String value = '(\'' + String.join(groupNames, '\',\'') + '\')';
String queryString = 'SELECT Id, Name, MultiSelectPicklist__c FROM Program__c where MultiSelectPicklist__c INCLUDES ' + value;
List<program__c> newlist = DataBase.query(queryString);
system.debug('List of records: '+newlist);
Related Topic