使用反射+泛型方法来处理Linq的修改

在使用Linq进行数据修改时操作比较麻烦,下面是我的Linq操作常用方法:

1.创建一个Linq To Sql的类,将数据库中数据拖到设计界面中如下图表结构:

2.编写DB.cs文件

    class DB

    {

        public static DBMDataContext db

        {

            get

            {

                return new DBMDataContext();

            }

        }

    }

3.编写CustomerDAL.cs文件

 

 

    class CustomerDAL

    {

        internal static void Add(HIS_Customers cust)

        {

            var db = DB.db;

            var mid = db.ExecuteQuery<int>("select isnull(MAX(id),0) from HIS_Customers").ToList()[0] + 1;

            cust.id = mid;

            db.HIS_Customers.InsertOnSubmit(cust);

            db.SubmitChanges();

        }

        internal static void Update(HIS_Customers cust)

        {

            var db = DB.db;

            var old = db.HIS_Customers.Single(d => d.id == cust.id);

            old.age = cust.age;

            old.age_unit = cust.age_unit;

            old.agent_addr = cust.agent_addr;

            old.agent_mobile = cust.agent_mobile;

            old.agent_name = cust.agent_name;

            old.agent_phone = cust.agent_phone;

            old.agent_relation = cust.agent_relation;

            old.agent_zip_code = cust.agent_zip_code;

            old.birth_place = cust.birth_place;

            old.card_id = cust.card_id;

            old.charge_type = cust.charge_type;

            old.create_datetime = cust.create_datetime;

            old.create_opt = cust.create_opt;

            old.date_of_birth = cust.date_of_birth;

            old.id_no = cust.id_no;

            old.id_type = cust.id_type;

            old.id_type = cust.id_type;

            old.job_occupation = cust.job_occupation;

            old.mailing_address = cust.mailing_address;

            old.mobile_num = cust.mobile_num;

            old.name = cust.name;

            old.name_phonetic = cust.name_phonetic;

            old.nation = cust.nation;

            old.phone_num = cust.phone_num;

            old.sex = cust.sex;

            old.unit_in_contract = cust.unit_in_contract;

            old.zip_code = cust.zip_code;

            db.SubmitChanges();

        }

        internal static void Delete(int id)

        {

            var db = DB.db;

            var old = db.HIS_Customers.Single(d => d.id == id);

            db.HIS_Customers.DeleteOnSubmit(old);

            db.SubmitChanges();

        }

        internal static List<HIS_Customers> FindAll()

        {

            return DB.db.HIS_Customers.ToList();

        }

    }

 

其中的修改方法是最麻烦的,表中字段多时就是一体力活.

 

4.使用反射+泛型方法写了一个CopyValue的方法放在DB.cs文件中,修改完后的DB.cs如下:

    class DB

    {

        public static DBMDataContext db

        {

            get

            {

                return new DBMDataContext();

            }

        }

        public static void CopyValue<T>(T from, T to)

        {

            Type t = typeof(T);

            var props = t.GetProperties();

            foreach (var p in props)

            {

                try

                {

                    var o = p.GetValue(from, null);

                    p.SetValue(to, o, null);

                }

                catch

                {

                }

            }

        }

    }

5.使用反射+泛型方法后的CustomerDAL.cs内容如下:

    class CustomerDAL

    {

        internal static void Add(HIS_Customers cust)

        {

            var db = DB.db;

            var mid = db.ExecuteQuery<int>("select isnull(MAX(id),0) from HIS_Customers").ToList()[0] + 1;

            cust.id = mid;

            db.HIS_Customers.InsertOnSubmit(cust);

            db.SubmitChanges();

        }

        internal static void Update(HIS_Customers cust)

        {

            var db = DB.db;

            var old = db.HIS_Customers.Single(d => d.id == cust.id);

            DB.CopyValue<HIS_Customers>(cust, old);

            db.SubmitChanges();

        }

        internal static void Delete(int id)

        {

            var db = DB.db;

            var old = db.HIS_Customers.Single(d => d.id == id);

            db.HIS_Customers.DeleteOnSubmit(old);

            db.SubmitChanges();

        }

        internal static List<HIS_Customers> FindAll()

        {

            return DB.db.HIS_Customers.ToList();

        }

    }

 

最核心就是这一行:

 DB.CopyValue<HIS_Customers>(cust, old);

简化了数据修改处理!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值