我有一个清单:
public class myObject(){
public string Id {get;set}
public string Name {get;set}
}
var list = new List<MyObject>();
现在我要删除列表中的所有重复项:
var dupsId=
from p in list
group p by p.Id into g
where g.Count() > 1
select g.Key;
var dups= new List<MyObject>();
foreach (var id in dupsId)
{
foreach (var listItem in list.FindAll(p => p.Id== id))
{
dups.Add(listItem);
}
}
dups.ForEach(p=>list.Remove(p));
它真的删除所有重复但我想要保存一个。例如:
list{
{1,aaaa}
{2,bbbb}
{1,aaaa}
{3,cccc}
{1,aaaa}
{2,bbbb}
}
我想得到:
list{
{1,aaaa}
{2,bbbb}
{3,cccc}
}
我如何修改我的代码呢?
答案 0 :(得分:3)
根据您的评论,您只想按ID
进行比较,查看MoreLINQ并使用DistinctBy运算符并按ID选择不同的对象。这就像下面的
var distinct = items.DistinctBy( i => i.Id );
答案 1 :(得分:2)
您可以按Id
对列表进行分组,然后从每个组中选择第一个元素
var distinctList = list.GroupBy(x => x.Id).Select(y => y.First());
答案 2 :(得分:1)
创建相等比较器:
public sealed class myObjectEqualityComparer : IEqualityComparer<myObject>
{
public bool Equals(myObject x, myObject y)
{
// null checking here
return x.Id == y.Id;
}
public int GetHashCode(myObject obj)
{
return obj.Id.GetHashCode();
}
}
并在Distinct
方法中使用它:
var uniqueItems = list
.Distinct(new myObjectEqualityComparer());