从属关系的两类数据调用【反射】
问题描述:有T1与T2类,T1类为主类,包括所有的字段,T2类只包含T1类中的部分字段。现有T1类数据,取T2类数据。
通过反射处理的方法如下:
1、方法函数
////// 将T1对象属性值反射到T2的对象属性上 /// /// /// /// /// public T2 T1CopyToT2 (T1 t1) { T2 t2 = (T2)Activator.CreateInstance(typeof(T2)); typeof(T2).GetProperties().ToList().ForEach(p => { if (p.CanWrite) { p.SetValue(t2, typeof(T1).GetProperty(p.Name).GetValue(t1)); } }); return t2; }
2、方法调用
//将ProductResultModel反射到DevRuntimeStatusModel,ProductResultModel是大类DevRuntimeStatusModel是部分类,productResult是数据 DevRuntimeStatusModel devRuntimeStatusModel = T1CopyToT2(productResult);
3、
T1类:ProductResultModel
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Model { [YSYEnitity(TableName = "电芯结果数据实体类")] [Serializable] public class ProductResultModel { ///作业员/// [YSYEnitity(ColumnName = "作业员")] public String OperatorName { get; set; } /// 在线数据/// [YSYEnitity(ColumnName = "在线数据")] public String Online { get; set; } /// 设备机台号/// [YSYEnitity(ColumnName = "设备机台号")] public String EquipmentName { get; set; } /// 工厂名称/// [YSYEnitity(ColumnName = "工厂名称")] public String FactoryName { get; set; } /// 产线/// [YSYEnitity(ColumnName = "产线")] public String MfgLineName { get; set; } /// 卷芯条码 /// [YSYEnitity(ColumnName = "卷芯条码 ")] public String ContainerName { get; set; } /// 虚拟码 /// [YSYEnitity(ColumnName = "虚拟码 ")] public String Vcode { get; set; } /// 工序名/// [YSYEnitity(ColumnName = "工序名")] public String SpecName { get; set; } /// 开始生产时间/// [YSYEnitity(ColumnName = "开始生产时间")] public String StartTime { get; set; } /// 结束时间/// [YSYEnitity(ColumnName = "结束时间")] public String EndTime { get; set; } /// 班次/// [YSYEnitity(ColumnName = "班次")] public String WorkShit { get; set; } /// 卷针号/// [YSYEnitity(ColumnName ="卷针号")] public string Needle { get; set; } /// 正极切刀条码/// [YSYEnitity(ColumnName = "正极切刀条码")] public String CathodeKnife { get; set; } /// 负极切刀条码/// [YSYEnitity(ColumnName = "负极切刀条码")] public String AnodeKnife { get; set; } /// 正极裁断切刀条码/// [YSYEnitity(ColumnName = "正极裁断切刀条码")] public String CathodeCutKnife { get; set; } /// 负极裁断切刀条码/// [YSYEnitity(ColumnName = "负极裁断切刀条码")] public String AnodeCutKnife { get; set; } /// 隔膜切刀条码/// [YSYEnitity(ColumnName = "隔膜切刀条码")] public String DiaphragmKnife { get; set; } /// 正极投入切刀次数/// [YSYEnitity(ColumnName = "正极投入切刀次数")] public String CathodeKnifeCount { get; set; } /// 负极投入切刀次数/// [YSYEnitity(ColumnName = "负极投入切刀次数")] public String AnodeKnifeCount { get; set; } /// 负极截断左备胶切刀次数/// [YSYEnitity(ColumnName = "负极截断左备胶切刀次数")] public String AnodeLeftCutCount { get; set; } /// 负极截断右备胶切刀次数/// [YSYEnitity(ColumnName = "负极截断右备胶切刀次数")] public String AnodeRightCutCount { get; set; } /// 负极截断胶切刀次数/// [YSYEnitity(ColumnName = "负极截断胶切刀次数")] public String AnodeCutCount { get; set; } /// 正极截断左备胶切刀次数/// [YSYEnitity(ColumnName = "正极截断左备胶切刀次数")] public String CathodeLeftCutCount { get; set; } /// 正极截断右备胶切刀次数/// [YSYEnitity(ColumnName = "正极截断右备胶切刀次数")] public String CathodeRightCutCount { get; set; } /// 正极截断胶切刀次数/// [YSYEnitity(ColumnName = "正极截断胶切刀次数")] public String CathodeCutCount { get; set; } /// 终止胶切刀次数/// [YSYEnitity(ColumnName = "终止胶切刀次数")] public String BlueKnifeCount { get; set; } /// 隔膜切刀次数/// [YSYEnitity(ColumnName = "隔膜切刀次数")] public String DiaphragmKnifeCount { get; set; } /// 负极极卷条码 [YSYEnitity(ColumnName = "负极极卷条码")] public String AnodeRollContainer { get; set; } = ""; /// 正极极卷条码 [YSYEnitity(ColumnName = "正极极卷条码")] public String CathodeRollContainer { get; set; } = ""; /// 收尾胶条码 [YSYEnitity(ColumnName = "收尾胶条码")] public String TapeContainer { get; set; } = ""; /// 高温胶条码 [YSYEnitity(ColumnName = "高温胶条码")] public String GreenTape { get; set; } = ""; /// 上隔膜条码 [YSYEnitity(ColumnName = "上隔膜条码")] public String UpDiaphragmContainer { get; set; } = ""; /// 下隔膜条码 [YSYEnitity(ColumnName = "下隔膜条码")] public String DownDiaphragmContainer { get; set; } = ""; /// 正极极耳总宽度/// [YSYEnitity(ColumnName = "正极极耳总宽度")] public String CathodeTabWidth { get; set; } /// 负极极耳总宽度/// [YSYEnitity(ColumnName = "负极极耳总宽度")] public String AnodeTabWidth { get; set; } /// 首片极耳边缘侧至卷芯边沿短边距离(偏心侧)/// [YSYEnitity(ColumnName = "首片极耳边缘侧至卷芯边沿短边距离(偏心侧)")] public String FirstPieceOffCentreLenth { get; set; } /// 卷绕负极极片计长/// [YSYEnitity(ColumnName = "卷绕负极极片计长")] public String AnodeElectrodeLength { get; set; } /// 卷绕正极极片计长/// [YSYEnitity(ColumnName = "卷绕正极极片计长")] public String CathodeElectrodeLength { get; set; } /// 正极长度设定/// [YSYEnitity(ColumnName = "正极长度设定")] public String CathodeLengthSetting { get; set; } /// 负极长度设定/// [YSYEnitity(ColumnName = "负极长度设定")] public String AnodeLengthSetting { get; set; } /// 隔膜到负极Overhang(卷芯头部)最大值/// [YSYEnitity(ColumnName = "隔膜到负极Overhang(卷芯头部)最大值")] public String DiaAnOverhangHeadMax { get; set; } /// 隔膜到负极Overhang(卷芯头部)最小值/// [YSYEnitity(ColumnName = "隔膜到负极Overhang(卷芯头部)最小值")] public String DiaAnOverhangHeadMin { get; set; } /// 隔膜到负极Overhang(卷芯头部)设定值/// [YSYEnitity(ColumnName = "隔膜到负极Overhang(卷芯头部)设定值")] public String DiaAnOverhangHeadSetting { get; set; } /// 隔膜到负极Overhang(卷芯头部)判定值/// [YSYEnitity(ColumnName = "隔膜到负极Overhang(卷芯头部)判定值")] public String DiaAnOverhangHeadIsOk { get; set; } /// 隔膜到负极Overhang(卷芯尾部)最大值/// [YSYEnitity(ColumnName = "隔膜到负极Overhang(卷芯尾部)最大值")] public String DiaAnOverhangTailMax { get; set; } /// 隔膜到负极Overhang(卷芯尾部)最小值/// [YSYEnitity(ColumnName = "隔膜到负极Overhang(卷芯尾部)最小值")] public String DiaAnOverhangTailMin { get; set; } /// 隔膜到负极Overhang(卷芯尾部)设定值/// [YSYEnitity(ColumnName = "隔膜到负极Overhang(卷芯尾部)设定值")] public String DiaAnOverhangTailSetting { get; set; } /// 隔膜到负极Overhang(卷芯尾部)判定值/// [YSYEnitity(ColumnName = "隔膜到负极Overhang(卷芯尾部)判定值")] public String DiaAnOverhangTailIsOk { get; set; } /// 隔膜到正极Overhang(卷芯头部)最大值/// [YSYEnitity(ColumnName = "隔膜到正极Overhang(卷芯头部)最大值")] public String DiaCaOverhangHeadMax { get; set; } /// 隔膜到正极Overhang(卷芯头部)最小值/// [YSYEnitity(ColumnName = "隔膜到正极Overhang(卷芯头部)最小值")] public String DiaCaOverhangHeadMin { get; set; } /// 隔膜到正极Overhang(卷芯头部)设定值/// [YSYEnitity(ColumnName = "隔膜到正极Overhang(卷芯头部)设定值")] public String DiaCaOverhangHeadSetting { get; set; } /// 隔膜到正极Overhang(卷芯头部)判定值/// [YSYEnitity(ColumnName = "隔膜到正极Overhang(卷芯头部)判定值")] public String DiaCaOverhangHeadOk { get; set; } /// 隔膜到正极Overhang(卷芯尾部)最大值/// [YSYEnitity(ColumnName = "隔膜到正极Overhang(卷芯尾部)最大值")] public String DiaCaOverhangTailMax { get; set; } /// 隔膜到正极Overhang(卷芯尾部)最小值/// [YSYEnitity(ColumnName = "隔膜到正极Overhang(卷芯尾部)最小值")] public String DiaCaOverhangTailMin { get; set; } /// 隔膜到正极Overhang(卷芯尾部)设定值/// [YSYEnitity(ColumnName = "隔膜到正极Overhang(卷芯尾部)设定值")] public String DiaCaOverhangTailSetting { get; set; } /// 隔膜到正极Overhang(卷芯尾部)判定值/// [YSYEnitity(ColumnName = "隔膜到正极Overhang(卷芯尾部)判定值")] public String DiaCaOverhangTailOk { get; set; } /// 负极到正极Overhang(卷芯头部)最大值/// [YSYEnitity(ColumnName = "负极到正极Overhang(卷芯头部)最大值")] public String AnCaOverhangHeadMax { get; set; } /// 负极到正极Overhang(卷芯头部)最小值/// [YSYEnitity(ColumnName = "负极到正极Overhang(卷芯头部)最小值")] public String AnCaOverhangHeadMin { get; set; } /// 负极到正极Overhang(卷芯头部)设定值/// [YSYEnitity(ColumnName = "负极到正极Overhang(卷芯头部)设定值")] public String AnCaOverhangHeadSetting { get; set; } /// 负极到正极Overhang(卷芯头部)判定值/// [YSYEnitity(ColumnName = "负极到正极Overhang(卷芯头部)判定值")] public String AnCaOverhangHeadIsOk { get; set; } /// 负极到正极Overhang(卷芯尾部)最大值/// [YSYEnitity(ColumnName = "负极到正极Overhang(卷芯尾部)最大值")] public String AnCaOverhangTailMax { get; set; } /// 负极到正极Overhang(卷芯尾部)最小值/// [YSYEnitity(ColumnName = "负极到正极Overhang(卷芯尾部)最小值")] public String AnCaOverhangTailMin { get; set; } /// 负极到正极Overhang(卷芯尾部)设定值/// [YSYEnitity(ColumnName = "负极到正极Overhang(卷芯尾部)设定值")] public String AnCaOverhangTailSetting { get; set; } /// 负极到正极Overhang(卷芯尾部)判定值/// [YSYEnitity(ColumnName = "负极到正极Overhang(卷芯尾部)判定值")] public String AnCaOverhangTailIsOk { get; set; } /// 负极到AT9 Overhang(卷芯头部)最大值/// [YSYEnitity(ColumnName = "负极到AT9 Overhang(卷芯头部)最大值")] public String AnAt9OverhangHeadMax { get; set; } /// 负极到AT9 Overhang(卷芯头部)最小值/// [YSYEnitity(ColumnName = "负极到AT9 Overhang(卷芯头部)最小值")] public String AnAt9OverhangHeadMin { get; set; } /// 负极到AT9 Overhang(卷芯头部)设定值/// [YSYEnitity(ColumnName = "负极到AT9 Overhang(卷芯头部)设定值")] public String AnAt9OverhangHeadSetting { get; set; } /// 负极到AT9 Overhang(卷芯头部)判断值/// [YSYEnitity(ColumnName = "负极到AT9 Overhang(卷芯头部)判断值")] public String AnAt9OverhangHeadIsOk { get; set; } /// 负极到AT9 Overhang(卷芯尾部)最大值/// [YSYEnitity(ColumnName = "负极到AT9 Overhang(卷芯尾部)最大值")] public String AnAt9OverhangTailMax { get; set; } /// 负极到AT9 Overhang(卷芯尾部)最小值/// [YSYEnitity(ColumnName = "负极到AT9 Overhang(卷芯尾部)最小值")] public String AnAt9OverhangTailMin { get; set; } /// 负极到AT9 Overhang(卷芯尾部)设定值/// [YSYEnitity(ColumnName = "负极到AT9 Overhang(卷芯尾部)设定值")] public String AnAT9OverhangTailSetting { get; set; } /// 负极到AT9 Overhang(卷芯尾部)判定值/// [YSYEnitity(ColumnName = "负极到AT9 Overhang(卷芯尾部)判定值")] public String AnAt9OverhangTailIsOk { get; set; } /// 正极耳翻折宽度最小值/// [YSYEnitity(ColumnName = "正极耳翻折宽度最小值")] public String CaTabFoldMinWidth { get; set; } /// 负极耳翻折宽度最小值/// [YSYEnitity(ColumnName = "负极耳翻折宽度最小值")] public String AnTabFoldMinWidth { get; set; } /// 正极耳翻折数量/// [YSYEnitity(ColumnName = "正极耳翻折数量")] public String CaTabFoldNum { get; set; } /// 负极耳翻折数量/// [YSYEnitity(ColumnName = "负极耳翻折数量")] public String AnTabFoldNum { get; set; } /// 正极耳翻折宽度设定值/// [YSYEnitity(ColumnName = "正极耳翻折宽度设定值")] public String CaFoldSettingWidth { get; set; } /// 负极耳翻折宽度设定值/// [YSYEnitity(ColumnName = "负极耳翻折宽度设定值")] public String AnFoldSettingWidth { get; set; } /// 材料 B/N/// [YSYEnitity(ColumnName = "材料 B/N")] public String BnName { get; set; } /// 参数判定结果/// [YSYEnitity(ColumnName = "参数判定结果")] public String Success { get; set; } /// 不良代码/// [YSYEnitity(ColumnName = "不良代码")] public String LossReason { get; set; } /// 正极极耳错位/// [YSYEnitity(ColumnName = "正极极耳错位")] public String CaDislocation { get; set; } /// 负极极耳错位/// [YSYEnitity(ColumnName = "负极极耳错位")] public String AnDislocation { get; set; } /// CCD正极到隔膜距离/// [YSYEnitity(ColumnName = "CCD正极到隔膜距离")] public String DisAnDiaphragm { get; set; } /// CCD负极到隔膜距离/// [YSYEnitity(ColumnName = "CCD负极到隔膜距离")] public String DisCaDiaphragm { get; set; } /// CCD正极到负极距离/// [YSYEnitity(ColumnName = "CCD正极到负极距离")] public String DisCaAn { get; set; } /// 创建时间/// [YSYEnitity(ColumnName = "创建时间")] public String CreateTime { get; set; } } }
T2类:DevRuntimeStatusModel
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Model { [YSYEnitity(TableName= "设备实时状态实体类")] [Serializable] public class DevRuntimeStatusModel { ////// 读取时间 /// [YSYEnitity(ColumnName = "读取时间")] public string ReadTime { get; set; } /// /// 员工工号 /// [YSYEnitity(ColumnName = "员工工号")] public string Operator { get; set; } /// /// 员工姓名 /// [YSYEnitity(ColumnName = "员工姓名")] public string EmployeeName { get; set; } /// /// 设备编号 /// [YSYEnitity(ColumnName = "设备编号")] public string DevSerialNO { get; set; } /// /// 卷芯型号 /// [YSYEnitity(ColumnName = "卷芯型号")] public string DevProType { get; set; } /// /// 负极片张力 /// [YSYEnitity(ColumnName = "负极片张力")] public double TensionOfNegative { get; set; } /// /// 上隔膜张力 /// [YSYEnitity(ColumnName = "上隔膜张力")] public double TensionOfUpGeMo { get; set; } /// /// 下隔膜张力 /// [YSYEnitity(ColumnName = "下隔膜张力")] public double TensionOfDownGeMo { get; set; } /// /// 正极片张力 /// [YSYEnitity(ColumnName = "正极片张力")] public double TensionOfPositive { get; set; } } }
productResult为productResultModel类型对象,由数据采集后赋值。devRuntimeStatusModel 是通过反射,从productResult中把自己对象的属性字段值拿出来。