问题描述
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 注入是额外的。