C#如何筛选新列表中的新增项及Size大于旧列表的已有项
How to filter
newList to include both new items and existing items with larger Size? 你的代码目前只筛选出了完全新增的条目(也就是名字不在oldList里的项,比如F3),但漏掉了「名字存在于oldList但Size更大」的情况(比如F2)。咱们调整一下Where的判断条件,把两种符合需求的情况都覆盖即可:
推荐方案(高效版)
首先把oldList转换成字典,这样可以快速通过Name查找对应的Size,避免重复遍历oldList(数据量大时性能优势明显):
// 将oldList转换为Name -> Size的映射字典 var oldItemSizeMap = oldList.ToDictionary(item => item.Name, item => item.Size); var filteredList = newList.Where(newItem => // 情况1:该条目是新增的(名字不在oldList中) !oldItemSizeMap.ContainsKey(newItem.Name) // 情况2:名字存在,但newList中的Size大于oldList对应项的Size || (oldItemSizeMap.ContainsKey(newItem.Name) && newItem.Size > oldItemSizeMap[newItem.Name]) ).ToList();
简化版(适合小数据量)
如果你的数据量很小,也可以直接在Where条件里判断,不用转字典:
var filteredList = newList.Where(newItem => // 新增条目 !oldList.Any(oldItem => oldItem.Name == newItem.Name) // 已有条目但Size更大 || oldList.Any(oldItem => oldItem.Name == newItem.Name && newItem.Size > oldItem.Size) ).ToList();
结果验证
运行上述代码后,filteredList会包含:
- F2:因为它的
Size(126)大于oldList中对应项的Size(125) - F3:因为它是
oldList中没有的新增条目
而Size相同的F1会被正确忽略,完全符合你的需求。
内容的提问来源于stack exchange,提问作者user584018
相关产品推荐
相关产品推荐

