query has too many rows for direct assignment, use FOR loop


代码运行时,如果碰到这个错误,主要是因为循环内检索到的 sObject 子记录集超过了200 个,比如

for (Account acct : [SELECT Id, Name, (SELECT Id, Name FROM Contacts)
                                                              FROM Account WHERE Id IN ('1')]) {
    List contactList = acct.Contacts; // 引用子查询集合的时候报错
    Integer count = acct.Contacts.size(); // 引用子查询集合的时候报错
}

建议的写法,可以避免出现这个异常:

for (Account acct : [SELECT Id, Name, (SELECT Id, Name FROM Contacts)
        FROM Account WHERE Id IN ('')]) {
    Integer count=0;
    for (Contact c : acct.Contacts) {
      count++;
    }
}