2014-02-20 55 views
10

我有两个对象列表。Linq除了只考虑一个属性

List<object1> obj1 = new List<object1>(); 

List<object2> obj2 = new List<object2>(); 

我想这样做:

obj2 = obj2.Except(obj1).ToList(); 

然而,通过阅读与我相似的其他问题,我的理解是,除非我重写等于该不起作用。

我不想这样做,但obj2和obj1都有一个字符串属性,足以查看它们是否相等。如果obj2.StringProperty等于那么这两者可以被认为是相等的。

有什么办法可以使用除了,但只使用字符串属性进行比较?

+0

什么是object1,object1和2是同一个类的实例? –

回答

22

Except方法要求涉及的两个集合类型具有相同的元素类型。在这种情况下,元素类型不同(object1object2),因此Except不是真正的选项。这里使用的更好的方法是Where

obj2 = obj2 
    .Where(x => !obj1.Any(y => y.StringProperty == x.StringProperty)) 
    .ToList(); 
+0

缺少一个'ToList()',但其他方面正是我需要的! –

+0

我认为在不同的类型上尝试使用'Except'时,连接也是一个不错的选择。 – evanmcdonnal

+0

@moalaz我的坏,没有看到。更新我的答案,以包括'ToList' – JaredPar