找到一段当初实现反射的代码

        /// <summary>
        /// 查询入口
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static List<T> ModelFall<T>(string sql) where T : new()
        {
            //公共访问器
            CommonController cc = new CommonController();
            //得到的结果
            DataSet dataSet = cc.cmsMipService.ExecuteDataSet(sql);
            //进行反射
            return PutAllVal<T>(dataSet); ;
        }
        /// <summary>
        /// 遍历列
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="ds"></param>
        /// <returns></returns>
        public static List<T> PutAllVal<T>(DataSet ds) where T : new()
        {
            List<T> lists = new List<T>();
            if (ds.Tables[0].Rows.Count > 0)
            {
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    lists.Add(PutVal(new T(), row, ds.Tables[0]));
                }
            }
            return lists;
        }
        /// <summary>
        /// 根据特性反射
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        /// <param name="row"></param>
        /// <param name="table"></param>
        /// <returns></returns>
        public static T PutVal<T>(T entity, DataRow row, DataTable table) where T : new()
        {
            //初始化 如果为null
            if (entity == null)
            {
                entity = new T();
            }
            //得到类型
            Type type = typeof(T);
            //取得属性集合
            System.Reflection.PropertyInfo[] pi = type.GetProperties();
            foreach (PropertyInfo item in pi)
            {
                object[] keys = item.GetCustomAttributes(typeof(TimesProperty), true);
                string name = "";
                if (keys.Length > 0)
                {
                    TimesProperty a = new TimesProperty();
                    a = (TimesProperty)keys[0];
                    name = a.TableName;
                }
                else
                {
                    name = item.Name;
                }
                if (table.Columns.Contains(name))
                {
                    //给属性赋值
                    if (row[name] != null && row[name] != DBNull.Value)
                    {
                        if (item.PropertyType == typeof(System.Nullable<System.DateTime>))
                        {
                            item.SetValue(entity, Convert.ToDateTime(row[name].ToString()), null);
                        }
                        else
                        {
                            item.SetValue(entity, Convert.ChangeType(row[name], item.PropertyType), null);
                        }
                    }
                }
            }
            return entity;
        }

特性是这样写的。

自定义特性

    [Serializable]
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = true)]
    public class TimesProperty : System.Attribute
    {
        public virtual string TableName { get; set; }
    }

实体类里

[TimesProperty(TableName = "ID")]
public virtual long Id { get; set; }
时间: 2024-10-25 19:45:48

找到一段当初实现反射的代码的相关文章

如何使用 SVN 找到一段时间内提交的代码文件

一.引言在实际使用 SVN 的过程中,我们总会遇到各种各样的问题.比如说,今天我又遇到了一个问题: 如下图所示:我们开发项目的主干从 A 点开始开发一个新的功能,结果到了 B 点感觉这个功能有点多,需要单独拉一个分支出来做,此时为了主干上代码的纯净,我们将主干上的代码回滚到了 A 点,然后拉出来了一个分支.此时问题来了,我们想要尽快的找到 A 到 B 点提交的代码,并且在分支上提交,我们应该怎么做? 这是一个工作中经常能够遇到的问题,难道要我们自己去寻找自己修改的代码然后一个文件一个文件拷贝出来

找到一段话中第二个关键字的位置

namespace  找到一段话中第二个关键字的位置 {    class Program    {        static void Main(string[] args)        {     //找第二个a            string s = "cabcaceadf";            int n = s.IndexOf("a");  //找到第一个a的索引n            string x = s.Substring(n+1);

.htaccess 一段神奇的跳转代码

<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_REFERER} ^.*(google|ask|yahoo|youtube|wikipedia|excite|altavista|msn|aol|goto|infoseek|lycos|search|bing|dogpile|facebook|twitter|live|myspace|linkedin|flickr)\.(.*) RewriteRule ^(.*)$ htt

段寄存器(8086CPU)和代码段

1.段寄存器 8086CPU有4个段寄存器:CS.DS.SS.ES.当8086CPU访问内存时,由这4个段寄存器提供内存单元的段地址. CS和IP是8086中最关键的寄存器,他们指示了CPU当前要读取指令的地址.CS是代码段寄存器,IP为指令指针寄存器.在8086PC机中,任意时刻,设CS中的内容是M,IP中的内容是N,8086CPU将从内存地址:M*16+N处读取指令并执行.也可以这样表述,8086机中,任意时候,CPU将CS:IP指向的内容当做指令执行,.CPU将CS.IP中的内容当做指令的

gdb调试技巧 找到php执行进程当前执行的代码

假设线上有一段php脚本,突然在某天出问题了,不处理但是进程没有退出.这种情况可能是异常休眠或者是有段死循环代码,但是我们怎么定位呢,我们这个时候最想知道的应该是这个脚本在此刻在做什么吧.这个是gdb+zbacktrace就有用了 首先随便写一个测试脚本test.php,里面就写一个sleep函数,换成死循环也可以. <?php function Mecho($i){ echo $i.PHP_EOL; } $i = 20; while($i>0){ if($i%2==0){ Mecho($i)

每每一看到自己的这段没通过的辛酸代码

Longest Valid Parentheses My Submissions Question Solution Total Accepted: 47520 Total Submissions: 222865 Difficulty: Hard Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses subs

一段发工资的shell代码

人事发工资条之前是一个个截图发到我们的邮箱里,看人事妹纸是一个善良而又美丽的姑凉,于是乎写了一段shell代码实现批量发短信至各个手机号.不多说了,上代码,其实很简单,我都不好意思上传,还是记录下吧,以后可以吹吹牛逼.其中的原理就是便历salary.csv中的每一条数据,这段代码最厉害的就是那个jar包了,没那个jar包,我这代码也不管用,明天上传一份发邮件实现相同功能的shell代码. #!/bin/bash SendMsg="/data/x5online/sendPhoneMsg.jar&q

7段数码管显示驱动代码

数码管显示进行简单的介绍,数码管显示原理在数电中已经给出了比较详细的介绍,我就不赘述了,因为我们用的是至芯的开发板,其上的数码管显示模块采用的是共阳极的数码管,为低电平有效,0-F的显示码依次为:    数码管的输入有3个位选和8个段选给出,位选信号sel来控制哪个数码管先亮,段选信号seg来控制数码管显示什么,位选本来应该是有6个的但是为了节约资源,采用了3-8译码器将6根线减少到3根,节约了FPGA的引脚资源. 因为人眼有一个视觉载留,所以60HZ来扫描的时候,数码管会让人眼觉得是同时点亮,

[javascript]一段焦点图的js代码

1 <html> 2 <head> 3 <meta name="name" content="content"charset="utf-8"/> 4 <style type="text/css" media="screen"> 5 #main{ width: 800px;height: 300px;margin: 0 auto;position: relati