使用Linq移除列表中重复Name的项,优先保留Primary类型
解决方案:Linq实现按Name去重并保留指定类型项
原始定义与数据
首先是你的MyClass定义:
public class MyClass { public int Id { get; set; } public string Name { get; set; } public string Type { get; set; } }
对应的示例列表数据(假设已加载为List<MyClass> myList):
1 John primary 2 John secondary 3 Joe primary 4 Jim primary
Linq实现代码
直接用链式调用完成需求,无需手动循环创建列表:
var filteredList = myList .GroupBy(item => item.Name) .Select(group => group.FirstOrDefault(item => item.Type == "primary") ?? group.First() ) .ToList();
逻辑解释
- GroupBy分组:按
Name将所有项分组,确保同一名称的项被归为一组。 - 分组内筛选:对每个分组执行两个操作:
- 优先查找组内
Type为primary的项(用FirstOrDefault,找不到会返回null); - 如果组内没有
primary类型的项(说明该名称只有一条数据),则直接取组内第一个元素(也就是唯一的那条数据)。
- 优先查找组内
最终结果
执行后filteredList将包含以下项:
1 John primary 3 Joe primary 4 Jim primary
内容的提问来源于stack exchange,提问作者DarkW1nter
相关产品推荐
相关产品推荐

