问题理解Salesforce Apex触发内联SOQL内的相等性检查



我遇到了这个我不太理解的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

最新更新