SOQL — APEX — Список

Здравствуйте!
У меня есть список со значениями из запроса. В списке есть несколько полей. Как я могу получить доступ к определенному полю из этого списка?

Проблема:

List <Account> listS = [Select 
                         (Select S__c from AS__r 
                         where S__r.Abc__c = 'Confirmed'), 
                         (Select PQR__c from AHS__r) 
                       from Account where Id in: TravellerIds];

List <AS__c> listAS = new list <AS__c>();
for (Account t: listS){
    listAS.add(t.AS__r);
}

Проблема в псевдокоде:
Для (каждой учетной записи в listS) {
ListAS.add(S__c поле из listS); }

Я попробовал то, что я упомянул в разделе «Проблема», но я не могу получить к нему доступ. Пожалуйста помогите.

Ошибка, которую я получаю, заключается в следующем: список содержит более 1 строки для назначения SObject.

Большое спасибо за помощь.

Примечание. Я не хочу получать доступ к полю S_c внутри цикла for для каждой AS_c. Я хочу получить к нему доступ для каждого Аккаунта.


person subodhbahl    schedule 08.07.2012    source источник


Ответы (1)


Поскольку вы запрашиваете отношения родитель-потомок, поле t.AS__r в объекте Account на самом деле представляет собой список объектов, которые соответствуют критериям подзапроса. Поэтому все, что вам нужно сделать, это изменить listAS.add(t.AS__r); на listAS.addAll(t.AS__r);, и это заставит ваш пример кода работать, добавляя все элементы, возвращаемые в подзапросе, в ваш новый список.

Кроме того, если вы хотите добавить все поля S_c, как вы говорите в своем псевдокоде, все, что вам нужно сделать, это просмотреть список подзапросов для каждой учетной записи и добавить поле S_c. в такой список:

List<string> listOfS = new List<string>();
for(Account acc : listAS){
  for(A__c a: acc.AS__r){
     listOfS.add(a.S__c);
  }
}

Это предполагает, что ваш пользовательский объект, на который ссылается имя отношения AS__r, имеет имя API A__c и что поле S__c имеет строковый тип, но, надеюсь, вы поняли идею.

Это помогает?

person Simon Goodyear    schedule 08.07.2012