enter code here
простая версия будет
var query = list2.Where(c=> list1.Select(l=>l.ID).Contains(c.ID))
, или вы можете использовать версию внутреннего соединения linq, если у вас нет повторений
var query = list2.Join(list1,a=>a.ID,b=>b.ID,(a,b)=>a);
или вы можете использовать Систему.Collections.Generic.IEQualityComparer
public class TestComparerer : IEqualityComparer<Test> {
bool IEqualityComparer<Test>.Equals(Test a, Test b) {
return a!=null && b!=null && a.ID.Equals(b.ID);
}
int IEqualityComparer<Test>.GetHashCode(Test a){
return a.ID.GetHashCode();
}
}
var query = list2.intersect(list1,new TestComparer());
Наконец, если вы переопределяете Equals и GetHashCode () в тесте, вы можете снова сделать их сопоставимыми
public override bool Equals(object o) {
var other=o as Test;
return other!=null && this.ID==other.ID;
}
public override int GetHashCode() {
return ID.GetHashCode();
}
, это позволит вам сделать list1.Intersect(list2)
или list2.Intersect(list1)