c# - 比较列表并返回不存在的对象

标签 c# .net linq

class Customer : IEquatable<Customer>
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string ZipCode { get; set; }

    public bool Equals(Customer other)
    {
        if (ReferenceEquals(null, other)) return false;

        return this.FirstName.Equals(other.FirstName) && this.LastName.Equals(other.LastName)
            && this.ZipCode.Equals(other.ZipCode); 
    }

    public override bool Equals(object obj)
    {
        return this.Equals(obj as Customer);
    }

    public override int GetHashCode()
    {
        return this.FirstName.GetHashCode() ^ this.LastName.GetHashCode();
    }
}

static void Main(string[] args)
{
    List<Customer> allCustomers = new List<Customer>();
    allCustomers.Add(new Customer { FirstName = "A", LastName = "V", ZipCode = "11111" });
    allCustomers.Add(new Customer { FirstName = "B", LastName = "W", ZipCode = "11111" });
    allCustomers.Add(new Customer { FirstName = "C", LastName = "X", ZipCode = "22222" });
    allCustomers.Add(new Customer { FirstName = "D", LastName = "Y", ZipCode = "33333" });
    allCustomers.Add(new Customer { FirstName = "E", LastName = "Z", ZipCode = "33333" });

    List<Customer> subList = new List<Customer>();
    subList.Add(new Customer { FirstName = "A", LastName = "V", ZipCode = "11111" });
    subList.Add(new Customer { FirstName = "B", LastName = "W", ZipCode = "11111" });
    subList.Add(new Customer { FirstName = "C", LastName = "X", ZipCode = "22222" });

    //This gives expected answer
    var n = subList.Except(allCustomers).ToList();

    //This should compare only for those customers who zip matches with Sublist's zip
    //This returns customers with zip code "33333" while it should not
    var v = allCustomers.Except(subList).ToList();
}

var V 不应返回邮政编码为“33333”的客户。我如何比较才能忽略那些 Zip 不在子列表中的客户?

最佳答案

 var zipCodes = subList.Select( c=> c.ZipCode).Distinct().ToList();
 var v = allCustomers.Where( c=> zipCodes.Contains(c.ZipCode) )
                     .Except(subList)
                     .ToList();

关于c# - 比较列表并返回不存在的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5782326/

相关文章:

c# - LINQ to xml - 如何选择特定节点?

c# - 根据类型组合列表中的元素并求和它们的值,LINQ

c# - 无法加载文件或程序集 'System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一

c# - 如果需要,将方案添加到 URL

c# - signalR 的客户端特定消息

.net - ReST 代理对象生成器

c# - 在 C# 中,可以将 Char 转换为 Int32 产生负值吗?

.net - Jenkins + SVN + .NET 项目 + 代码审查。最好的方法是这样做吗?

.net - 使用 Windows 调试工具调试 .NET 2.0 Winforms 应用程序

c# - 我可以将 Linq 的 Except() 与 lambda 表达式比较器一起使用吗?