【发布时间】:2017-11-16 04:11:38
【问题描述】:
我想比较两个相同类型的 LINQ 实体并返回两者之间的差异列表。我有比较属性并返回差异的代码。
(来自:https://stackoverflow.com/a/5812100/2343826)
public static void WriteChanges<T>(T obj1, T obj2, string objName, int objId, int userId)
{
PropertyInfo[] properties = typeof(T).GetProperties();
StringBuilder sb = new StringBuilder();
foreach (PropertyInfo pi in properties)
{
object value1 = typeof(T).GetProperty(pi.Name).GetValue(obj1, null);
object value2 = typeof(T).GetProperty(pi.Name).GetValue(obj2, null);
if (value1 != value2 && (value1 == null || !value1.Equals(value2)))
{
sb.Append(string.Format("Property {0} changed from {1} to {2}" + Environment.NewLine, pi.Name, value1, value2));
}
}
Write(objName, objId, sb.ToString(), userId);
}
结果:
属性 oItem 从 NS.oItem 更改为 NS.oItem
属性 dvPC 从 pcName1 更改为 pcName2
是否可以修改此代码以确定属性是否也是 LINQ 实体,如果是,则递归检查子实体是否存在差异?
例如,在上面的示例结果中,NS.oItem 是与 obj1 关联的子实体。我想要遍历子对象的方法来比较obj1和obj2之间的差异
感谢您的帮助
【问题讨论】:
-
您可以在 Linq 表达式中使用该方法。我无法正确解决您的问题。请您提供一些代码吗?
-
嗨@Rainman - 感谢您的意愿...我已经将上面的问题更改为更简洁。让我知道.. 再次感谢!
标签: c# entity-framework linq system.reflection