如何通过LINQ实现字典与列表按关键字匹配生成新字典?
当然有!这里有个简洁的LINQ实现方案
你可以结合Join和ToDictionary方法来快速完成这个转换,代码非常紧凑:
var newDictionary = dictionary .Join(records, dictEntry => dictEntry.Value, animal => animal.Name, (dictEntry, animal) => new { dictEntry.Key, animal.Id }) .ToDictionary(pair => pair.Key, pair => pair.Id);
代码拆解说明:
Join方法:负责把原字典的条目和Animal列表做关联,匹配规则是原字典的Value(比如"DOG")和Animal对象的Name属性完全一致。- 关联完成后,我们只保留需要的两个字段:原字典的
Key(比如"dog")和对应动物的Id(比如"1"),用匿名类型打包成新的序列。 ToDictionary方法:把这个临时序列直接转换成目标格式的字典,键取匿名类型的Key,值取Id。
实用扩展提示:
- 如果你的数据可能存在匹配不上的情况(比如原字典里的某个值在
records中找不到对应Name),可以提前过滤或者用GroupJoin来处理;但如果能保证两边数据完全匹配,上面的代码已经足够简洁高效。 - 如果需要忽略大小写的匹配(比如原字典值是"Dog"而
Animal的Name是"DOG"),可以在Join的最后加上字符串比较器参数:
var newDictionary = dictionary .Join(records, dictEntry => dictEntry.Value, animal => animal.Name, (dictEntry, animal) => new { dictEntry.Key, animal.Id }, StringComparer.OrdinalIgnoreCase) .ToDictionary(pair => pair.Key, pair => pair.Id);
内容的提问来源于stack exchange,提问作者AndreasLengkeek
相关产品推荐
相关产品推荐

