两个列表的交集会导致一个空列表

本文关键字:列表 一个 两个 | 更新日期: 2023-09-27 18:27:06

我有两个列表

List<clsEntity> usersWithNPIRCodingPermission // It has count 159
List<clsEntity> usersWithRaiseReq // It has count 219

当在这些上做交集时(有55条记录,但我的下一行得到了空列表)

List<clsEntity> users = usersWithRaiseReq.Intersect(usersWithNPIRCodingPermission).ToList();

为什么生成的users列表为空?

两个列表的交集会导致一个空列表

如果类型不是基元(例如int等),则需要为其实现相等比较器

public class UsersComparer : IEqualityComparer<clsEntity>
{
    public bool Equals(clsEntity x, clsEntity y)
    {
        if (Object.ReferenceEquals(x, y)) return true;
        if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
            return false;
        return x.ID == y.ID; // or whatever you use to determine equality
    }
    public int GetHashCode(clsEntity x)
    {
        if (Object.ReferenceEquals(x, null)) return 0;
        return x.ID.GetHashCode();
    }
}

用法:

List<clsEntity> users = usersWithRaiseReq.Except(
      usersWithNPIRCodingPermissionn, new UsersComparer()).ToList();