var classA = new List<FatherClass> { new FatherClass { ID = "1", Name = "1", Other = new List<ClassOne> { new ClassOne { ID = 11, Professional = "xy1", Post = "xy1" }, new ClassOne { ID = 12, Professional = "wy1", Post = "wy1" } } } }; var classB = new List<FatherClass> { new FatherClass { ID = "1", Name = "1", Other = new List<ClassOne> { new ClassOne { Professional = "xy1", Post = "xy12" }, new ClassOne { Professional = "wy1", Post = "wy13" } } }, new FatherClass { ID = "2", Name = "2", Other = new List<ClassOne> { new ClassOne { Professional = "xy2", Post = "xy2" }, new ClassOne { Professional = "wy2", Post = "wy2" } } } }; // 多余的外部订单集合 List<FatherClass> excessSellRefundList = null; // 筛选多余的外部订单集合对象 foreach (var outSellRefund in classB) { var sellRefundTs = from optimSell in classA where optimSell.Other.Find( arg => optimSell.Name.Equals(outSellRefund.Name) && outSellRefund.Other.Find(xy => arg.Professional.Equals(xy.Professional)) != null) == null select optimSell; if (!sellRefundTs.Any()) { continue; } if (excessSellRefundList == null) { excessSellRefundList = new List<FatherClass>(); } excessSellRefundList.Add(outSellRefund); } // 相同的ID对象内部指定参数赋值 foreach (var a in classA) { // 找到相同名字的参数对象(从classB中找到classA相对应名字的对象) var model = classB.Find(arg => arg.Name.Equals(a.Name)); if (model == null) { continue; } // 比对对象中的对应属性值 foreach (var property in a.GetType().GetProperties()) { // 排除主键 if (property.Name.Equals("ID")) { continue; } // 循环model对象中的对应属性值 foreach (var outProperty in model.GetType().GetProperties()) { // 排除主键 if (outProperty.Name.Equals("ID")) { continue; } // 判断属性名是否相同 if (property.Name.Equals(outProperty.Name)) { // 判断当前属性类型是否为泛型集合 if (property.PropertyType == typeof(List<ClassOne>)) { // 得到对应的属性值 var tmpClassOne = property.GetValue(a, null) as List<ClassOne>; // 得到对应的属性值 var tmpOutClassOne = outProperty.GetValue(model, null) as List<ClassOne>; if (tmpClassOne == null || tmpClassOne.Count == 0) { continue; } if (tmpOutClassOne == null || tmpOutClassOne.Count == 0) { continue; } // 循环泛型集合对象 foreach (var fatherClass in tmpClassOne) { // 循环需要比对的泛型集合对象 foreach (var classOne in tmpOutClassOne) { // 比对关键值是否相同 if (fatherClass.Professional.Equals(classOne.Professional)) { // 进行属性赋值(循环) foreach (var propertyInfo in fatherClass.GetType().GetProperties()) { // 排除指定ID if (propertyInfo.Name.Equals("ID")) { continue; } // 循环需要比对的对象的属性 foreach (var onePropertyInfo in classOne.GetType().GetProperties()) { if (onePropertyInfo.Name.Equals("ID")) { continue; } // 属性名相同,进行赋值操作 if (propertyInfo.Name.Equals(onePropertyInfo.Name)) { propertyInfo.SetValue( fatherClass, onePropertyInfo.GetValue(classOne, null), null); } } } } else { break; } } } } else { // 属性名相同,进行赋值操作 if (property.Name.Equals(outProperty.Name)) { property.SetValue(a, outProperty.GetValue(model, null), null); } } } } } } if (excessSellRefundList != null && excessSellRefundList.Count > 0) { classA.AddRange(excessSellRefundList); }
/// <summary> /// @class类 /// </summary> [Serializable] public class ClassOne { public int ID { get; set; } public string Professional { get; set; } public string Post { get; set; } }
/// <summary> /// FatherClass类 /// </summary> [Serializable] public class FatherClass { public string ID { get; set; } public string Name { get; set; } public List<ClassOne> Other { get; set; } }