对于自定义对象,LINQ Distinct不是那么聪明。
它所做的只是查看您的列表,并看到它具有两个不同的对象(它不在乎它们的成员字段具有相同的值)。
一个解决办法是实现IEquatable接口如图所示这里。
如果您像这样修改Author类,它应该可以工作。
public class Author : IEquatable<Author>{ public string FirstName { get; set; } public string LastName { get; set; } public bool Equals(Author other) { if (FirstName == other.FirstName && LastName == other.LastName) return true; return false; } public override int GetHashCode() { int hashFirstName = FirstName == null ? 0 : FirstName.GetHashCode(); int hashLastName = LastName == null ? 0 : LastName.GetHashCode(); return hashFirstName ^ hashLastName; }}尝试作为DotNetFiddle



