3

我有 2 个自定义对象约会_c和 TimeDrive_c

约会有字段

  1. 开始日期__c
  2. 联系__c

TimeDrive__c 有

  1. 目标日期__c
  2. 联系__c
  3. 创建日期

这是我需要做的

我需要获取特定日期范围内的所有记录

select id, Target_date__c, Contact__c,  Name, CreatedDate
                    from TimeDrive__c  where Target_date__c >=:startdate  and 
                    Target_date__c <=:enddate

我需要遍历此列表中的每条记录,并检查此联系人是否有约会,其 startdate 介于 targetdate 和 createddate 之间

这是我到目前为止所做的一点

        timeDriverLst = [select id, Target_date__c, Contact__c,  Name, CreatedDate
                    from TimeDrive__c  where Target_date__c >=:startdate  and 
                    Target_date__c <=:enddate ];

    if(timeDriverLst.size() >0){
    for(integer i =0; i < timeDriverLst.size(); i++)
    {
        mapTime.put(timeDriverLst[i].id, timeDriverLst[i]);

       /* appLst = [Select Name, Contact__c from Appointment__c where (StartDate__c > = :timeDriverLst[i].CreatedDate 
                 and StartDateTime__c <=:timeDriverLst[i].Target_date__c) and Contact__c = :timeDriverLst[i].Contact__c ];   
           */      

    }

我知道我不应该在 for 循环中有 SOQL 查询。我怎样才能避免这种情况并达到要求。

4

1 回答 1

4

一个丑陋但可能可用的解决方案:您可以从时间驱动程序列表中获取所有联系人 ID,并找到最早创建的日期。然后,您可以提取联系人 ID 在联系人 ID 列表中且日期介于最早创建日期和目标日期之间的所有约会。然后你需要做一个双循环,检查每个约会和每个时间司机。(在您检索应用程序时按联系人或按日期订购这些应用程序可能会有所帮助)。

于 2012-05-04T09:56:49.793 回答