佛山软件定制

自动赋值方法CloneObjectData<SourceType, CloneType>-atnet类库

使用场景:在两个有相同属性的类之间拷贝数据,bool ignoreNullValue参数可选是否忽略空值拷贝

方法定义:

/// <summary>
        /// 拷贝对象的数据
        /// </summary>
        /// <param name="s">包含数据的对象</param>
        /// <param name="c">要拷贝数据的对象</param>

        /// <param name="ignoreNullValue">是否忽略空值</param>
       public static void CloneObjectData<SourceType, CloneType>(SourceType s, CloneType c,bool ignoreNullValue);

使用范例:

using Atnet.Data;
   
public static void GetCustomProfile(Account account)
        {
            pa_AccountInfoControl p = new pa_AccountInfoControl { AccountName = account.AccountName };
            p.ExecuteNonQuery();
            DataHelper.CloneObjectData<pa_AccountInfoControl, Account>(p, account, false);
        }

        public static void UpdateCustomProfile(Account account)
        {
            pa_AccountInfoControl p = new pa_AccountInfoControl();
            DataHelper.CloneObjectData<Account,pa_AccountInfoControl>(account, p, false); 
            p.ExecuteNonQuery();
        }

pa_AccountInfoControl为代码生成器生成的存储过程类,Account为一个实体类,方法实现了更新和获得数据!

东方网新,为您提供专业的网站建设,软件开发,网络营销SEO,网络推广服务,代理国外主机空间,域名注册,服务热线:(+86)18608275575,电子邮件:master#atnet.cc;欢迎您访问东方网新网站:www.atnet.cc

源代码:

/*
 * Author   :   Newmin
 * Date     :   2010/10/27
 * siteuri    :   http://blog.atnet.cc/atnetlib/
 */
namespace HuiShi.Data
{
    using System;
    using System.Reflection;
    using System.Collections.Generic;
    using System.Text;

    /// <summary>
    /// 数据辅助类
    /// </summary>
    public static class DataHelper
    {
        /// <summary>
        /// 拷贝对象的数据
        /// </summary>
        /// <param name="s">包含数据的对象</param>
        /// <param name="c">要拷贝数据的对象</param>
        public static void CloneObjectData<SourceType, CloneType>(SourceType s, CloneType c)
        {
            CloneObjectData<SourceType, CloneType>(s, c, true);
        }
        /// <summary>
        /// 拷贝对象的数据
        /// </summary>
        /// <param name="s">包含数据的对象</param>
        /// <param name="c">要拷贝数据的对象</param>
        /// <param name="ignoreNullValue">是否忽略空值</param>
        public static void CloneObjectData<SourceType, CloneType>(SourceType s, CloneType c,bool ignoreNullValue)
        {
            //获取各自的属性
            PropertyInfo[] props = typeof(SourceType).GetProperties();
            PropertyInfo[] cp = typeof(CloneType).GetProperties();

            PropertyInfo _p;                                //PropertyInfo       
            object _pv;                                     //PropertyValue
            foreach (PropertyInfo p in props)
            {
                _p = Array.Find(cp, a => string.Compare(a.Name, p.Name, true) == 0);
                if (_p != null)
                {
                    _pv = p.GetValue(s, null);
                    if (!ignoreNullValue && _pv == null) continue;
                    _p.SetValue(c, _pv, null);
                }
            }
        }
    }
}

 

原创文章转载请注明出处!

原文链接:http://blog.atnet.cc/atnetlib/cloneobjectdata/

atnet项目专栏及源代码下载:http://blog.atnet.cc/atnetlib/ 

 

posted on 2010-10-28 12:25  New.min  阅读(382)  评论(0编辑  收藏  举报

导航