[英]Get list of parent records from multilevel SOQL query
I'm trying to combine 3 separate SOQL queries into one, but still end up with 3 separate lists for ease of use and readability later.我正在尝试将 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];
I know I can get a list of child objects thus:我知道我可以得到一个子对象列表:
List<Child_Object__c> childObjectList = new List<Child_Object__c>();
for(Object__c object : objectList){
childObjectList.addAll(object.Child_Objects__r);
}
How would I go about adding the Parent_Object__c records to their own list?我将如何 go 将 Parent_Object__c 记录添加到自己的列表中? I'm assuming a map could be used to deal with duplicates, but how do I get this Parent_Object__c data into that map?
我假设 map 可用于处理重复项,但如何将 Parent_Object__c 数据放入 map 中?
You are basically there.你基本上在那里。
All lookup fields are available in your example as object.Parent_Object__r
.所有查找字段在您的示例中都可用
object.Parent_Object__r
。 Use a Set
to natively avoid duplicates.使用
Set
本机避免重复。 No deduping required on your part!您无需进行重复数据删除!
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);
}
Edit:编辑:
As per @eyescream (trust him.) you are indeed better off with a map to avoid duplicates.根据@eyescream(相信他),您确实最好使用 map 以避免重复。
So the above code would just be slightly different:所以上面的代码会略有不同:
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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.