简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM