Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Salesforce 从多级SOQL查询获取父记录列表_Salesforce_Apex_Apex Code_Soql - Fatal编程技术网

Salesforce 从多级SOQL查询获取父记录列表

Salesforce 从多级SOQL查询获取父记录列表,salesforce,apex,apex-code,soql,Salesforce,Apex,Apex Code,Soql,我试图将3个单独的SOQL查询组合成一个查询,但最终还是得到了3个单独的列表,以便于以后的使用和可读性 List<Object__c> objectList = [SELECT Name, Id, Parent_Object__r.Name, Parent_Object__r.Id, (SELECT Name, Id FROM Child_Objects__r)

我试图将3个单独的SOQL查询组合成一个查询,但最终还是得到了3个单独的列表,以便于以后的使用和可读性

List<Object__c> objectList = [SELECT Name, Id, Parent_Object__r.Name, Parent_Object__r.Id,
                                   (SELECT Name, Id FROM Child_Objects__r)
                                FROM Object__c];
我知道我可以得到子对象的列表,因此:

List<Child_Object__c> childObjectList = new List<Child_Object__c>();
for(Object__c object : objectList){
   childObjectList.addAll(object.Child_Objects__r);
}
如何将父对象添加到它们自己的列表中?
我假设一个映射可以用来处理重复的数据,但是我如何把这个父对象数据放到映射中呢

在您的示例中,所有查找字段都可以作为object.Parent\u object\r使用。使用集合以本机方式避免重复。您不需要重复数据消除

Set<Parent_Object__c> parentObjectSet = new Set<Parent_Object__c>();
List<Child_Object__c> childObjectList = new List<Child_Object__c>();
for(Object__c object : objectList){
  childObjectList.addAll(object.Child_Objects__r);
  parentObjectSet.add(object.Parent_Object__r);
}
编辑:

根据@eyescream,相信他!为了避免重复,您最好使用地图

因此,上述代码将略有不同:

Map<Id, Parent_Object__c> parentObjectMap = new Map<Id, Parent_Object__c>();
List<Child_Object__c> childObjectList = new List<Child_Object__c>();
for(Object__c object : objectList){
  childObjectList.addAll(object.Child_Objects__r);
  if (object.Parent_Object__r != null) {
    parentObjectMap.put(object.Parent_Object__r.Id, object.Parent_Object__r);
  }
}
+1但这张地图安全一点,并没有什么意外。对象集的行为很有趣:。在这个特定的场景中,这可能没什么大不了的,但是如果在另一个地方重用它,可能会导致长时间的调试会话。