从属关系的两类数据调用【反射】


问题描述:有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中把自己对象的属性字段值拿出来。