首页 新闻 会员 周边

怎么方便地判断那些字段被修改了

0
悬赏园豆:5 [已解决问题] 解决于 2015-05-06 11:40

比如一个用户表有20个字段来储存用户信息,这些信息用户在一个页面可以统一修改,那么用户post的时候,有什么方便的办法可以知道用户修改了那些字段(正常情况下,一般一次修改的字段值只有几个)

泰德的主页 泰德 | 初学一级 | 园豆:6
提问于:2015-05-02 22:15
< >
分享
最佳答案
0

把post过来的这个model和这个用户本身信息(根据用户id获取)的model用linq进行比较

收获园豆:5
请叫我头头哥 | 大侠五级 |园豆:9382 | 2015-05-03 16:29

请问具体怎么实现呢?

泰德 | 园豆:6 (初学一级) | 2015-05-03 21:05

我写了下列代码,不知道这算不算是用linq 进行比较:

/// <summary>
    /// 找出实体被修改盗字段
    /// </summary>
    public class FindPropertiesChanged
    {
        /// <summary>
        /// 找出实体被修改盗字段
        /// </summary>
        /// <param name="before">修改前实体</param>
        /// <param name="after">修改后实体</param>
        /// <returns>修改内容</returns>
        public static String Find(object before,object after)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("");
            PropertyInfo[] beforepropertys = before.GetType().GetProperties();
            PropertyInfo[] afterpropertys = after.GetType().GetProperties();

            //linq的方式
            var post = afterpropertys.Where(s => s.GetValue(after) != null);
            foreach(var a in post)
            {
                var changed = beforepropertys.Where(s => s.Name == a.Name && s.GetValue(before) != null && s.GetValue(before) != a.GetValue(after)).FirstOrDefault();
                if (changed!=null)
                {
                    //修改记录
            sb.Append(changed.Name
+ ":" + changed.GetValue(before) + "->" + a.Name + ":" + a.GetValue(after) + ""); } } return sb.ToString(); } }
泰德 | 园豆:6 (初学一级) | 2015-05-03 21:18

@泰德: 这个也勉强算是吧, 你如果能将这个foreach有效的和where结合在一起,那就回让代码更简洁 。 不过这样也行, 可读性会好一些。

请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-05-04 10:40

@请叫我头头哥: 

"foreach有效的和where结合在一起"

这个怎么结合?

泰德 | 园豆:6 (初学一级) | 2015-05-06 11:40

@泰德: Linq有自带的foreach

请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-05-06 21:25
其他回答(3)
0

写点代码对比还算方便,如果要更方便的,也是有的,那就是叫别人做这事,最方便了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-05-02 22:45
0

 当用户修改了信息, 用一个临时集合存放修改了的信息,提交的时候对临时集合进行处理

cf_fch | 园豆:161 (初学一级) | 2015-05-03 16:21

请问具体怎么实现呢?

支持(0) 反对(0) 泰德 | 园豆:6 (初学一级) | 2015-05-03 21:05
0

如果容易将横向数据结构,变成纵向数据结构:

字段名  字段值

ID       100001

这样的话,用linq的except方法就很容易找到改变的数据了。

凡一二三 | 园豆:85 (初学一级) | 2015-05-04 18:03

这样倒是方便找出那些字段修改了,但是不方便找出改为什么了

支持(0) 反对(0) 泰德 | 园豆:6 (初学一级) | 2015-05-06 11:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册