using System; using System.Collections.Generic; using System.Linq; namespace CompareList { internal class Program { static void Main(string[] args) { ObjClass[] fruits1 = { new ObjClass{ ID="张三",Ver="一",Three=1}, new ObjClass{ ID="张三",Ver="一",Three=1}, new ObjClass{ ID="张三",Ver="一",Three=1}, new ObjClass{ ID="张三",Ver="二",Three=1}, new ObjClass{ ID="李四",Ver="四",Three=1}, new ObjClass{ ID="李四",Ver="四",Three=1}, new ObjClass{ ID="李四",Ver="四",Three=1}, new ObjClass{ ID="王五",Ver="五",Three=1}, new ObjClass{ ID="王五",Ver="五",Three=1} }; var temp = fruits1.Select((m, i) => { m.Index = i; return m; }); ObjClass[] fruits2 = temp .GroupBy(m => new { m.ID, m.Ver, m.Three }).Select(m => new ObjClass { Three = m.Key.Three, ID = m.Key.ID, Ver = m.Key.Ver, Index = m.First().Index }).ToArray(); // Get all the elements from the first array // except for the elements from the second array. IEnumerable<ObjClass> except = temp.Except(fruits2, new ProductComparer()); foreach (var product in except) Console.WriteLine(product.ID + " " + product.Ver + " " + product.Three); Console.ReadLine(); } } public class ObjClass { public int Index { get; set; } public string ID { get; set; } public string Ver { get; set; } public int Three { get; set; } } // Custom comparer for the Product class class ProductComparer : IEqualityComparer<ObjClass> { // Products are equal if their names and product numbers are equal. public bool Equals(ObjClass x, ObjClass y) { //Check whether the compared objects reference the same data. if (Object.ReferenceEquals(x, y)) return true; //Check whether any of the compared objects is null. if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null)) return false; //Check whether the products' properties are equal. return x.ID == y.ID && x.Ver == y.Ver && x.Three == y.Three && x.Index == y.Index; } // If Equals() returns true for a pair of objects // then GetHashCode() must return the same value for these objects. public int GetHashCode(ObjClass product) { //Check whether the object is null if (Object.ReferenceEquals(product, null)) return 0; //Get hash code for the Name field if it is not null. int hashProductName = product.ID == null ? 0 : product.ID.GetHashCode(); //Get hash code for the Code field. int hashProductCode = product.Ver.GetHashCode(); int hashThree = product.Three.GetHashCode(); int hashIndex = product.Index.GetHashCode(); //Calculate the hash code for the product. return hashProductName ^ hashProductCode ^ hashThree ^ hashIndex; } } }
标签:取差集,product,Ver,自定义,Three,Linq,ObjClass,new,ID From: https://www.cnblogs.com/superfeeling/p/17001707.html