可能是由于默认情况下Linq Distinct方法只检查对象的引用是否相同,而不是对象的值是否相同。要解决该问题,可以使用IEqualityComparer来指定比较对象的条件。
示例代码如下:
定义一个类MyClass,并重写它的Equals和GetHashCode方法:
class MyClass { public int Id { get; set; } public string Name { get; set; }
public override bool Equals(object obj)
{
if (obj == null || !(obj is MyClass))
{
return false;
}
return this.Id == ((MyClass)obj).Id && this.Name == ((MyClass)obj).Name;
}
public override int GetHashCode()
{
return this.Id.GetHashCode() ^ this.Name.GetHashCode();
}
}
在需要用到Distinct方法的地方,使用自定义的IEqualityComparer:
var list = new List
var distinctList = list.Distinct(new MyClassEqualityComparer());
// 自定义的IEqualityComparer
class MyClassEqualityComparer : IEqualityComparer
public int GetHashCode(MyClass obj)
{
if (obj == null)
{
return 0;
}
return obj.GetHashCode();
}
}
通过这种方式,就可以在ASP.net Core C#中使用Linq Distinct方法来比较对象的属性值是否相同。