如何在LINQ查询中整合Dictionary的填充逻辑?
解决方案
你可以通过以下方式将字典填充逻辑整合到LINQ流程中,去掉显式的foreach循环:
方法一:复用现有PopulateMyGlobalDictionary方法
把查询结果转为集合后,直接用List的ForEach方法替代foreach循环:
var query = from blah in blahblahList // 保留原有查询逻辑 join meta in metaList on key equals meta.Name select new { ItemVal = blah[key], ItemType = meta.Type, }; // 用ForEach替代foreach循环执行填充逻辑 query.ToList().ForEach(q => PopulateMyGlobalDictionary(q.ItemVal, q.ItemType));
方法二:内嵌填充逻辑
如果不想依赖单独的方法,也可以把逻辑直接写进LINQ后续操作里:
var query = from blah in blahblahList // 保留原有查询逻辑 join meta in metaList on key equals meta.Name select new { ItemVal = blah[key], ItemType = meta.Type, }; query.ToList().ForEach(q => { // 执行那一行额外逻辑 // 例如:DoExtraLogic(); // 检查键是否存在,不存在则添加 if (!my_dict.ContainsKey(q.ItemVal)) { my_dict.Add(q.ItemVal, q.ItemType); } });
注意点
- LINQ的核心是数据查询,而非执行修改全局状态这类副作用操作,用
ForEach只是语法上替代了foreach循环,本质还是遍历执行; - 如果查询结果数据量很大,
ToList()会一次性把所有数据加载到内存,这种情况下显式foreach循环的内存效率更高; my_dict的readonly修饰符只是限制字典对象的引用不能被替换,添加键值对这类修改内容的操作是完全允许的。
内容的提问来源于stack exchange,提问作者LonelySemiColon
相关产品推荐
相关产品推荐

