使用特定比较规则设置操作

时间:2010-10-21 10:54:03

标签: c# .net linq set

我有两个清单:

List<User> collection1 = new List<User>();
List<User> collection2 = new List<User>();

1)我必须使用LINQ获取两个列表共有的所有项目。但是,课程User有很多属性,我只想比较FirstNameLastName

2)如何使用相同的比较规则获取collection1中的项目,而不是collection2中的项目?

1 个答案:

答案 0 :(得分:3)

第一个问题使用Enumerable.Intersect,第二个问题使用Enumerable.Except。即:

var common = collection1.Intersect(collection2, new UserEqualityComparer());
var difference = collection1.Except(collection2, new UserEqualityComparer());

在这里,我当然假设UserEqualityComparer如此实现IEqualityComparer<User>

class UserEqualityComparer : IEqualityComparer<User> {
    public bool Equals(User x, User y) {
        if (Object.ReferenceEquals(x, y)) {
            return true;
        }
        if (x == null || y == null) {
            return false;
        }
        return x.FirstName == y.FirstName && x.LastName == y.LastName;
    }

    public int GetHashCode(User obj) {
        if (obj == null) {
            return 0;
        }
        return 23 * obj.FirstName.GetHashCode() + obj.LastName.GetHashCode();
    }
}