给出一个清单......
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完成此任务的任何想法?
答案 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());