Salesforce 从多级SOQL查询获取父记录列表
我试图将3个单独的SOQL查询组合成一个查询,但最终还是得到了3个单独的列表,以便于以后的使用和可读性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)
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但这张地图安全一点,并没有什么意外。对象集的行为很有趣:。在这个特定的场景中,这可能没什么大不了的,但是如果在另一个地方重用它,可能会导致长时间的调试会话。