オブジェクトは値ではなく参照によって比較されるためEntity.CompanyRoles
、削除しようとしているオブジェクトとしてメモリ内に正確な参照が含まれていない限り、コレクション内のオブジェクトを見つけて削除することはありません。
それを修正する2つの方法があります。
最良の方法は、 Paulが提案するように、コレクション内のオブジェクトへの参照を取得することです。
var userToRemove = Entity.CompanyRoles.Single(cr =>
cr.user_role == "Admin" && cr.User_ID = Entity.User_ID);
Entity.CompanyRoles.Remove(userToRemove);
または、機能する別の方法は、メモリ参照に関係なく、データが同じである場合にオブジェクトを上書きして、.Equals()
それらが等しいと見なすことです。特別な場合を除いて、通常これはお勧めしません。これは、このオブジェクトの1つのコピーを使用して別のコピーと比較する操作に影響するためです。.Equals()
public override bool Equals(object obj)
{
if (obj == null || !(obj == MyClass))
return false;
var obj2 = obj as MyClass;
return obj2.user_role == this.user_role && obj2.User_ID == this.User_ID;
}