如何用C#和Linq筛选任意数量列表中的共同产品ID?
问题
在ASP.NET MVC应用中,需根据用户选择的产品规格进行筛选。用户选择的参数如下:
manufacturer: [apple, sony, samsung] ram: [8, 128, 256] size: [12, 13.5]
基于该选择得到多组产品ID列表:
list1={10,12,18,100} list2={10,18,20,21,100,102} list3={1,2,9,10,12,18,100}
期望结果为所有列表的共同ID:
result={10,18,100}
由于可能存在超过3个列表的情况,是否有支持任意数量列表的Linq命令?
解决方案
可以使用Linq的Aggregate方法结合Intersect来实现任意数量列表的交集计算,这是处理多列表交集最简洁的方式。
代码示例
假设我们有一个包含所有产品ID列表的集合:
var productIdLists = new List<List<int>> { new List<int> {10,12,18,100}, new List<int> {10,18,20,21,100,102}, new List<int> {1,2,9,10,12,18,100} // 可继续添加更多列表 }; // 计算所有列表的共同ID var commonIds = productIdLists.Aggregate((currentIntersection, nextList) => currentIntersection.Intersect(nextList).ToList());
原理说明
Aggregate会以集合中的第一个列表作为初始交集结果,然后依次将当前结果与下一个列表执行Intersect(求交集)操作,最终得到所有列表的共同元素。- 即使后续添加更多的产品ID列表,这段代码也不需要修改,完全支持任意数量的列表输入。
内容的提问来源于stack exchange,提问作者Arya
相关产品推荐
相关产品推荐

