通过循环列表而不使用foreach循环将键值对添加到字典中

问题描述 投票:0回答:1

我有如下代码,如何避免使用下面的 foreach,我正在循环遍历列表并将键值添加到字典中,无论如何我可以避免下面代码中的 foreach 循环并将值添加到字典中

DataQueryResult<Agreement> _agreements = new DataQueryResult<Agreement>();
Dictionary<Guid, Contact> _contacts = new Dictionary<Guid, Contact>();
_agreements = this.agreementRepository.GetAgreementsByQuery(_parameters);
Agreement _agreement = _agreements?.Data?.FirstOrDefault();

if (_agreement.AgreementActive)
{
    // add contactids for the agreemenet
    var _agreementContacts = await this.contactRepository.GetAgreementContactsAsync(_agreement.AgreementId.Value, null);
     
    foreach (var _contact in _agreementContacts.Data)
    {         
        if (_contact.Role.RoleId == DCCommonConstants.RoleId.KeyPersonnel &&
            _contact.PersonActive &&
            !_contacts.ContainsKey(_contact.ContactId.Value))
        {
            _contacts.Add(_contact.ContactId.Value, _contact);
        }
    }
}  

任何帮助将不胜感激,提前致谢。

c# asp.net-mvc
1个回答
0
投票

你不写为什么你想这样做,但像下面这样的东西应该可以解决问题:

var contacts = _agreementContacts.Data
    .Where(c => c.Role.RoleId == DCCommonConstants.RoleId.KeyPersonnel &&
                c.PersonActive)
    .GroupBy(c => c.ContactId.Value)
    .ToDictionary(c => c.First().ContactId.Value, _contact => _contact);

当我阅读GroupBy文档时,组中的元素保留原始顺序,因此获取这些元素的

First()
应该相当于检查该键是否已在字典中。

© www.soinside.com 2019 - 2024. All rights reserved.