在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());