如何将 soql 查询的结果放入 map<Id,String>

How to put result of soql query in map<Id,String>

我在 Salesforce 中创建了一个触发器,我正在通过 soql 查询获取结果并将结果存储在地图中,但它显示以下错误:

Error: Compile Error: Invalid initializer type List found for Map: expected a Map with the same key and value types, or a valid SObject List at line 7 column 25

trigger insertUpdateOwnerToSalesRep on Account (after insert, before update) {
    if (trigger.IsAfter && trigger.IsUpdate) {
        List<User> lstUser =[select id,name from User where Id in:(Trigger.NewMap).keySet()];

        //Map<Id,String> ac=new Map<Id,String>([]);
        Map<ID, String> m = new Map<ID, String>([select id,name from User where Id in:(Trigger.NewMap).keySet()]);
        for(Account ac:Trigger.New) {
            System.debug('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\t'+ac.ownerid);
            if (ac.owner!=null) {
                User user=ac.owner;
                System.debug('!!!!!!!!!!!!!!\t'+user);
                //ac.Sales_Rep__c=ac.owner.userName;
            }
        }
    }
}

请帮忙,提前致谢。

首先,您尝试通过 ID 访问 select 用户,但是当您调用 Trigger.NewMap.keySet() 时,您将获得一组帐户 ID,而不是用户(因为在帐户对象上触发)。可能,您想获取与帐户相关的所有用户,因此在 'where' 条件下使用 AccountId。另外我想指出的是,您在获取后不使用 'lstUser' 变量。

至于从 select 获取地图,你应该使用 Map<Id, User> 而不是 Map<Id, String>:

Map<Id, User> m = new Map<Id, User>([SELECT Id, Name FROM User where AccountId in :(Trigger.NewMap).keySet()]);