是否存在LINQ函数可检查对象列表的属性是否匹配字典值?
解决方案
首先你现有代码里存在笔误:循环变量是item,但判断逻辑里写的是object.Attribute,应该修正为item.Attribute。
针对你的需求,提供两种优化方案:
1. 简化代码(LINQ写法)
直接用LINQ的Where方法替代foreach循环,一行代码即可完成筛选:
var filteredList = model.Where(item => dictionary.Values.Contains(item.Attribute)).ToList();
2. 提升查找性能
如果字典元素数量较多,或者待筛选的集合规模较大,直接调用dictionary.Values.Contains会每次执行线性遍历(时间复杂度O(n)),效率偏低。建议先将字典的值转换为HashSet<string>,利用HashSet的O(1)快速查找特性:
// 仅需执行一次的初始化操作 var valueLookupSet = new HashSet<string>(dictionary.Values); // 基于HashSet完成高效筛选 var filteredList = model.Where(item => valueLookupSet.Contains(item.Attribute)).ToList();
这种方式既简化了代码结构,又能在数据量较大时显著提升运行效率。
内容的提问来源于stack exchange,提问作者Drinkbeergetmoney
相关产品推荐
相关产品推荐

