我有一个可枚举的记录,有时记录会具有相同的名称..所以我想从中删除一个。
例如名称是:“Prag1”
所以现在我首先想检查在 ienumerable 中是否有多个元素的名称为:“Prag1”
如果是,那么我想删除一个元素并保留另一个元素。
我已经尝试过这个但不适合我..
data.ToList().Remove(data.ToList().Find(x => x.Name == "Prag1));
更新: Distinct 对我不起作用,因为在我的列表中还有一个名为 Date 的字段,并且它的值会有所不同。
因此,如果 Company1 中的第一个记录日期是 11 月 15 日,那么现在第二个记录日期将是 11 月 22 日
根据我的说法,将 IEnumerable 转换为 List 将是修改集合的一种方法。
请参考以下示例实现:
var list = data.ToList();
var seenNames = new HashSet<string>();
for (int i = list.Count - 1; i >= 0; i--)
{
if (seenNames.Contains(list[i].Name))
{
list.RemoveAt(i);
}
else
{
seenNames.Add(list[i].Name);
}
}
IEnumerable<T> result = list.AsEnumerable();
如果不需要修改原始集合,您还可以使用 LINQ 创建具有唯一元素的新集合:
var uniqueData = data.GroupBy(x => x.Name)
.Select(g => g.First());