- リンクを取得
- ×
- メール
- 他のアプリ
- リンクを取得
- ×
- メール
- 他のアプリ
【SOQLクエリ結果をApexのMapに変換する方法】
SOQLクエリの結果をMap<Id, SObject>形式で扱うことは可能です。直接的にはSOQLの実行結果はリストとして返されますが、簡単にMapに変換する方法があります。以下に解説します。
目的
- キー: OpportunityのId
- 値: 対応するOpportunityレコード
Mapへの変換方法
SOQLクエリの結果を直接Mapに変換する方法は、Map<Id, SObject>コンストラクタを使用することです。
コード例
// SOQLでレコードを取得 List<Opportunity> opportunities = [SELECT Id, OwnerId, Probability, Owner.Name FROM Opportunity WHERE LastModifiedDate = LAST_N_DAYS:7]; // ListをMapに変換 Map<Id, Opportunity> opportunityMap = new Map<Id, Opportunity>(opportunities); // 確認: 特定のOpportunityをキーで取得 System.debug('Opportunity with specific Id: ' + opportunityMap.get('006XXXXXXXXXXXX'));
Mapに変換するメリット
- 高速なアクセス
Mapを使用することで、キー(ここではOpportunity.Id)を使用して素早く特定のレコードにアクセスできます。 - クエリ結果の整理
複数のOpportunityを扱う際に、IDをキーとして整理されるため可読性と操作性が向上します。
クエリ結果を直接Mapで取得できるか
SOQL自体はMap形式で結果を返しません。クエリ結果は常にList<SObject>として返されるため、Map形式にしたい場合は手動で変換する必要があります。
その他の方法:手動でMapを作成
Mapコンストラクタを使わず、手動でキーと値を指定してMapを作成する方法もあります。
コード例
// 手動でMapを作成 Map<Id, Opportunity> opportunityMap = new Map<Id, Opportunity>(); for (Opportunity opp : [SELECT Id, OwnerId, Probability, Owner.Name FROM Opportunity WHERE LastModifiedDate = LAST_N_DAYS:7]) { opportunityMap.put(opp.Id, opp); } // 確認 System.debug('Manual Map creation: ' + opportunityMap);
注意点
- データ量の制限
SOQLクエリは最大50,000件のレコードを返しますが、Mapに多くのデータを格納するとメモリを消費します。 - キーのユニーク性
Mapのキー(ここではId)はユニークでなければならないため、クエリ結果に同じIdが含まれる場合は注意が必要です。
コメント
コメントを投稿