动态反射

摘要:
=null){varinValue=fieldInfo.GetValue;field.SetValue;}}returnoutModel;}传入的A对象、A的外键和B的主键适用于:classA{Bb{get;set;}}类B{}
        /// <summary>
        /// 创建lambda表达式:p=>p.propertyName == propertyValue
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="column"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static Expression<Func<T, bool>> CreateEqual<T>(string propertyName, string propertyValue)
        {
            ParameterExpression parameter = Expression.Parameter(typeof(T), propertyName);//创建参数p
            MemberExpression member = Expression.PropertyOrField(parameter, propertyName);
            ConstantExpression constant = Expression.Constant(propertyValue);//创建常数
            return Expression.Lambda<Func<T, bool>>(Expression.Equal(member, constant), parameter);
        }
       

        /// <summary>
        /// 泛型+反射
        /// </summary>
        /// <typeparam name="TOut">传出</typeparam>
        /// <typeparam name="TIn">传入</typeparam>
        /// <typeparam name="TM">包含类型</typeparam>
        /// <typeparam name="name">在传入类中的字段</typeparam>
        /// <typeparam name="id">包含类的关联字段</typeparam>
        /// <typeparam name="exp">条件</typeparam>      
        /// <param name="objIn"></param>
        /// <returns></returns>
        public TOut TypeContent<TOut, TIn>(TIn objIn,string name, string id)
        {            
            Type tOut = typeof(TOut);
            Type tIn = typeof(TIn);
            Type ttm = typeof(TM);
            TOut outModel = Activator.CreateInstance<TOut>();           
            // 属性赋值
            foreach (var prop in tOut.GetProperties())
            {
                var propInfo = tIn.GetProperty(prop.Name);
                if (propInfo != null)
                {
                    var inValue = propInfo.GetValue(objIn);
                    if (propInfo.Name == name)
                    {                       
                        var tmInfo = ttm.GetProperty(id);
                        var dbSet = Context.Set<TM>().AsNoTracking().AsQueryable();
                        var muc = dbSet.FirstOrDefault(CreateEqual<TM>(id, inValue.ToString()));
                        if (muc == null)
                        {
                            prop.SetValue(outModel, new Musics());
                        }
                        else
                        {
                            prop.SetValue(outModel, muc);

                        }
                    }
                    else
                    {                       
                        prop.SetValue(outModel, inValue);
                    }
                }
            }
            // 字段赋值
            foreach (var field in tOut.GetFields())
            {
                var fieldInfo = tIn.GetField(field.Name);
                if (fieldInfo != null)
                {
                    var inValue = fieldInfo.GetValue(objIn);
                    field.SetValue(outModel, inValue);
                }
            }
            
            return outModel;
        }

传入A对象、A的外键、B的主键

适用于:

class A

{

  B b{get;set;}
}

class B

{

 
}

免责声明:文章转载自《动态反射》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇常用grads函数对于反爬虫伪装浏览器进行爬虫下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js获取本月,本季度,上个季度,本周,上周的起始和结束时间

1 /* 获得某月的天数 */ 2 function getMonthDays(myMonth) { 3 var nowYear = new Date().getFullYear(); //当前年 4 var monthStartDate = new Date(nowYear, myMonth, 1)...

echarts 超过预警值后节点变红预警

<!DOCTYPE html> <html style="height: 100%"> <head> <meta charset="utf-8"> </head> <body style="height: 100%; margin: 0">...

[译]AngularJS Services 获取后端数据

原文:ANGULARJS SERVICES – FETCHING SERVER DATA $http是AngularJS内置的服务,能帮助我们完成从服务端获数据。简单的用法就是在你需要数据的时候,发起$http请求,使用返回的数据。这个样做是能工作,但是当你的应用越来越复杂的时候,你会发现你在不断的重复的写这个http请求的代码。为了避免这种事情的发生,我...

jquery获取的html元素和document获取的元素的区别

最近通过ocx做了一个视频插件,然后将插件放到html中(想知道的可以看一下) 因为我要操作这个插件,要播放,停止等,所以我需要获取这个元素,不出意外的,我就用jquery来获取,然后根本无法执行,然后用document来获取,正常执行,具体的如下所示 //正常执行 var obj = document.getElementById("play...

NetMQ——推拉模式 Push-Pull

推送端 using (var pushSocket = new PushSocket("@tcp://127.0.0.1:1212")) { while (true) { //pushSocket.Connect();...

Jqgrid获取行id

//获取选中行(单行)的ID var id = $("#table").jqGrid('getGridParam','selrow'); //根据id获取行数据,返回的是列表 var rowDatas = $("#table").jqGrid('getRowData', id);...