c# - IEnumerable.Except() not excluding -
i have 2 arrays. first holds members, second holds claimed members. i'm trying unclaimed members using except, resulting array includes members (an exact copy of first array).
var junior_handler_all = db2.junior_handler.include(j => j.person).include(j => j.status).toarray(); var junior_handler_claimed = db.junior_handler.include(j => j.person).include(j => j.status).toarray(); var junior_handler_unclaimed = junior_handler_all.except(junior_handler_claimed).toarray(); i have tried getting unclaimed members using query same results.
var junior_handler_unclaimed = junior_handler_all.where(i => !junior_handler_claimed.contains(i.junior_handler_id.tostring())); any ideas why either of these aren't working?
the way except , contains compare elements calling gethashcode() , - if hash equal - calling equals check if 2 elements equal.
so if apply reference types not have own implementation of gethashcode() , equals(), comparison results in simple reference equality check.
you don't want compare references of objects, kind of id. have 2 options:
you can either override gethashcode() , equals() in class:
public class person { public int id { get; set; } public override bool equals(object o) { return id == (o person)?.id; } public override int gethashcode() { return id; } } or implement iequalitycomparer<person> this:
public class comparer : iequalitycomparer<person> { public bool equals(person x, person y) { return x.id == y.id; // or whatever defines equality } public int gethashcode(person obj) { return obj.id; // or whatever makes hash } } and provide instance of comparer except:
var junior_handler_unclaimed = junior_handler_all.except(junior_handler_claimed, new comparer()).toarray();
Comments
Post a Comment