public static bool PropertiesEqual<T>(T self, T to, params string[] skip)
where T : class
{
if (self != null && to != null)
{
var selfType = self.GetType();
var skipList = new List<string>(skip);
foreach (PropertyInfo pi in selfType.GetProperties(BindingFlags.Public |
BindingFlags.Instance))
{
if (skipList.Contains(pi.Name)) continue;
var selfValue = selfType.GetProperty(pi.Name).GetValue(self, null);
var toValue = selfType.GetProperty(pi.Name).GetValue(to, null);
if (selfValue != toValue && (selfValue == null ||
!selfValue.Equals(toValue)))
{
return false;
}
}
return true;
}
return self == to;
}
2 つのインスタンスのプリミティブ (?) プロパティ (数値、文字列、ブール値、添付されていないオブジェクトなどのプロパティ) を比較する拡張メソッドを使用して、EF エンティティを拡張したいと考えています。
私が知りたいのは、これを拡張メソッドとして作成することは可能ですか? それとも、私がやりたいEFタイプごとにPOCOクラスでこれを定義する必要がありますinstance1.PropertiesEqual(instance2)
か?
2 番目に知りたいことは、上記のデータ型のみを適切にターゲットにして、添付オブジェクト (接続されたテーブル) をスキップする方法です。