Salesforce、Apex、SOQL、SELECT 和 INCLUDES

问题描述

Apex 中的这段代码有什么问题?

String states = 'California,New York';
List<Account> lstACC = [SELECT Id,Name,BillingState FROM Account WHERE BillingState INCLUDES (:states) LIMIT 10];

在开发者控制台中出现错误“BillingState FROM Account WHERE BillingState INCLUDES (:states)^ERROR at Row:1:Column:50 包含或排除仅对多选列表字段有效的运算符”

解决方法

错误文字说明问题:

includes or excludes 运算符只对 multipicklist 字段有效

BillingState 不是多选选项列表。使用 IN 而不是 INCLUDES 来匹配集合。

另外请注意,逗号分隔的字符串不是要匹配的有效集合。创建一个 List<String>Set<String> 以在您的匹配条件中使用。

,

正确的解决方案:

Set<String> setStates = new Set<String>();
setStates.add('California');
setStates.add('New York');
List<Account> lstACC = [SELECT Id,Name,BillingState 
                        FROM Account 
                        WHERE BillingState IN :setStates 
                        LIMIT 10];

错误:

setStates: {'California','New York'}

对:

setStates: {California,New York}

撇号是另外的。

String states = 'California,New York';
List<String> listStates = states.split(',');
List<Account> lstACC = [SELECT Id,BillingState 
                        FROM Account 
                        WHERE BillingState IN :listStates 
                        LIMIT 10];

错误:

String states = '\'California\',\'New York\'';

对:

String states = 'California,New York';

SOQL 注入是额外的。