List<Person> PList = new List<Person>();
PList.Add(new Person{ Name = "Bob", email = "Bob.b@blah.org" });
基本上这会保存文件中的重复行
我想弄清楚的是如何删除多少,直到列表中每个人只有一个实例。
我最初的想法是使用for循环来运行并基于比较删除
for (int i = 0; i < List.length; i++)
{
if (PList.position(i).name == PList.position(i++).name)
if (PList.position(i).date is < PList.position(i++).date)
"Then I will delete number 1"
}
但是,我想知道是否有更好或更简单的方法来做到这一点?
答案 0 :(得分:5)
试试这个
PList = PList.GroupBy (x => x.Name).SelectMany (x=>x.OrderBy(y=> y.Date).Take(1))
我还没有执行查询。
答案 1 :(得分:0)
使用Distinct
方法并编写GetHasCode
类的Equals
和Person
方法的相应实现。
public class Person : IEquatable<Person>
{
public string Name { get; set; }
public string Email { get; set; }
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
if (obj.GetType() != GetType())
{
return false;
}
return Equals((Person)obj);
}
public override int GetHashCode()
{
unchecked
{
var hash = 17;
hash = hash * 23 + (Name == null ? 0 : Name.GetHashCode());
hash = hash * 23 + (Email == null ? 0 : Email.GetHashCode());
return hash;
}
}
public bool Equals(Person other)
{
if (other == null)
{
return false;
}
return Name == other.Name && Email == other.Email;
}
}
然后调用Enumerable.Distinct
方法。