Apex SOQL Map语法问题:如何仅提取指定字段构建Map<Id,Id>
如何构建仅包含指定Id字段的Map?
问题描述
尝试执行以下代码时遇到问题:
Map<Id,Id> reqMap = new Map<Id,Id>(); reqMap = [Select Id, TeamId from SObject];
其中Id和TeamId均为Id类型,需求是不获取完整的SObject对象,仅提取这两个字段,构建格式如下的Map:
{Id = xyz, TeamId =abc}
解决方案
你直接将SOQL查询结果赋值给Map<Id,Id>的写法是错误的——Apex中SOQL返回的是List<SObject>,只有Map<Id,SObject>才能直接用查询结果初始化。要实现需求,需要手动遍历查询结果来构建目标Map:
场景1:单条记录的字段-Id映射
如果只需要处理单条查询结果,生成包含Id和TeamId字段的Map:
// 查询单条目标记录 SObject targetRecord = [SELECT Id, TeamId FROM SObject LIMIT 1]; // 初始化存储字段与Id的Map Map<String, Id> reqMap = new Map<String, Id>(); // 手动填入字段值 reqMap.put('Id', targetRecord.Id); reqMap.put('TeamId', (Id)targetRecord.get('TeamId'));
场景2:多条记录的Id-TeamId映射
如果需要批量处理所有查询结果,用每条记录的Id作为键,对应的TeamId作为值:
Map<Id, Id> reqMap = new Map<Id, Id>(); // 遍历查询结果,逐个构建键值对 for(SObject record : [SELECT Id, TeamId FROM SObject]){ reqMap.put(record.Id, (Id)record.get('TeamId')); }
内容的提问来源于stack exchange,提问作者Riz
相关产品推荐
相关产品推荐

