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

时间:2010-05-08 00:14:49

标签: c# linq

给出一个清单......

class Item
{
 public Name
 {
   get;
   set;
 }
}

List<Item> items = new List<Item>
{
 new Item() { Name = "Item 1" },
 new Item() { Name = "Item 1" },
 new Item() { Name = "Item 2" },
 new Item() { Name = "Item 3" }
}

List<Item> listing = new List<Item>
{
 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完成此任务的任何想法?

1 个答案:

答案 0 :(得分:3)

首先,您需要为EqualityComparer创建Item

public sealed class ItemEqualityComparer : EqualityComparer<Item>
{
    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());