从多级 SOQL 查询中获取父记录列表
Get list of parent records from multilevel SOQL query
我试图将 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);
}
我该如何将 Parent_Object__c 记录添加到它们自己的列表中?
我假设地图可用于处理重复项,但如何将此 Parent_Object__c 数据放入该地图?
你基本上就在那里。
所有查找字段在您的示例中都可用 object.Parent_Object__r
。使用 Set
来避免重复。您无需删除重复数据!
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);
}
}
我试图将 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);
}
我该如何将 Parent_Object__c 记录添加到它们自己的列表中? 我假设地图可用于处理重复项,但如何将此 Parent_Object__c 数据放入该地图?
你基本上就在那里。
所有查找字段在您的示例中都可用 object.Parent_Object__r
。使用 Set
来避免重复。您无需删除重复数据!
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);
}
}