我遇到了这个我不太理解的Apex触发器代码。。。
Id当然是IdhId是一个SET
我通常会期待"其中Id IN:hId";,而不是"其中Id=:hId";
trigger linkHusbandAndWife on h2w_c (after insert) {
Set<Id> hId = new Set<Id>();
for (h2w_c h2w : Trigger.New) {
hId.add(h2w);
}
List<Husband_c> husbandlist = [
SELECT Id Wife_Id
FROM Husband_c
WHERE Id = :hId
];
...
}
问题:怎样才能"Id="hId";hId何时为SET?这在某种程度上等同于";Id IN:hId">
是的,用Apex编写的查询语法非常宽容。特别是普通的SOQL(用[brackets]
编写,而不是用动态SOQL从字符串中创建查询(。它更多的是Apex功能而不是SOQL,您可能已经在错误的参考指南中找到了。神奇之处在于";绑定变量";(:
(,并且在通过API进行原始查询时不能总是使用相同的技巧。
WHERE Id = :collection
是好的。Collection
是类型为Id
、Set或List的单个变量。
CCD_ 6具有相同的结果。而且你甚至不需要括号!
这意味着你的查询可以放弃制作一个集的中间步骤,更少的代码要写:
SELECT Id, Wife_Id__c FROM Husband_c WHERE Id IN :trigger.new
。
CCD_ 8将被静默地"激活";铸造";为了SOQL的目的,将CCD_。我使用引号是因为通常你不能强制转换,sObject永远不会是Id的实例。如果你在正常代码中需要类似的行为,你需要Set<Id> mySet= new Map<Id, sObject>(mylist).keyset();
之类的东西。
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_SOQL_variables.htm
https://developer.salesforce.com/forums/?id=906F000000090b1IAA
https://salesforce.stackexchange.com/questions/17695/how-do-i-build-a-soql-query-for-records-in-a-list-of-ids