在Enumerable(Linq)中查看项目是否存在一次

给出一个清单……

class Item { public Name { get; set; } } List items = new List { new Item() { Name = "Item 1" }, new Item() { Name = "Item 1" }, new Item() { Name = "Item 2" }, new Item() { Name = "Item 3" } } List listing = new List { new Item() { Name = "Item 1" }, new Item() { Name = "Item 2" }, new Item() { Name = "Item 3" } new Item() { Name = "Item 4" } } 

等等

我需要创建一个第三个数组,它将取消两者之间的双实例; 但是具有“名称1”的项目都是相同的,但是不同的“实例”。 所以第三个List应该有1个Item 1的实例,因为’items’有2个实例。 有关如何通过Linq完成此任务的任何想法?

首先,您需要为Item创建EqualityComparer

 public sealed class ItemEqualityComparer : EqualityComparer { public override bool Equals(Item x, Item y) { return x.Name.CompareTo(y.Name) == 0; } public override int GetHashCode(Item obj) { return obj.Name.GetHashCode(); } } 

然后你需要打电话的是Union

 var itemUnion = items.Union(listing, new ItemEqualityComparer());