C# list筛选出重复数据
时间: 2025-02-22 14:18:07 AIGC 浏览: 73
### 查找并过滤 C# 列表中的重复项
为了在 C# 中从列表中筛选出重复的数据,可以使用 LINQ 提供的强大功能来实现这一目标。下面展示了一个具体的例子,该方法不仅能够找出所有的重复项目,还能保留原始数据结构。
对于给定的对象列表 `sourceObjectList` 和特定字段名 `fieldName` 的情况下,可以通过反射获取指定属性的值,并去除这些值中的重复项:
```csharp
var sourceObjectList = new List<object>();
// 使用LINQ查询语句结合反射机制提取名为"FieldName"字段的值,并去重处理
sourceObjectList = Items.Cast<object>()
.Select(x => x.GetType().GetProperty(fieldName)?.GetValue(x, null))
.Where(item => item != null) // 过滤掉可能存在的null值
.GroupBy(item => item)
.Where(group => group.Count() > 1) // 只选取出现次数大于一次即存在重复情况下的分组
.SelectMany(group => group.Take(1)) // 对于每一个有重复的情况只取第一次出现的那个实例
.ToList();
```
上述代码片段通过调用 `.Cast<object>()` 将集合转换为泛型对象序列;接着利用`.Select()` 方法配合反射技术访问所需属性;再经由 `.Where()` 来排除任何可能是 `null` 的结果;之后采用 `.GroupBy()` 函数按照实际取得的内容进行分类汇总;最后借助 `.Where()` 再次筛选出那些数量超过一项(意味着确实发生了重复)的类别,并最终形成新的不含冗余元素的结果集[^1]。
如果目的是简单地移除整个列表内的所有重复条目而不关心具体哪个字段,则可以直接应用更简洁的方式完成操作:
```csharp
var distinctItems = originalList.Distinct().ToList();
```
此行命令会返回一个新的列表,其中仅包含来自原列表里独一无二的不同成员。
阅读全文
相关推荐




















