• 根据属性获取属性名


    大家所熟知的WinForm的DataGridView绑定数据方式基本上就是使用Rows.Add来进行添加数据,这样有一个不好的是,重新查询的时候要将Rows.Clear了,不然会重复添加,还有如果列的位置更换了,那么它的显示位置就错乱,展示出的数据不明确,所以本人不提倡此方法!还有一种就是给它的DataSource属性绑定数据,可以用DataTable类型或者List类型等进行绑定,但是必须要设置每个列的DataPropertyName属性,这个属性的意思是与数据对象的那个属性进行绑定。如果是List的话那么可以直接将对象的属性赋予DataPropertyName,但是DataTable的话就得知道DataTable中的列名才能进行绑定,这样的话在开发当中总要到MSSqlServer中去查看列名,开发速度上会相对慢一些,所以我就想可不可以根据对象的属性来返回属性名呢?经过我多番的网上搜索,找到了正确的答案,答案是可以的,那么是怎么的实现的呢?下面我来解释,请先看代码:

     1 /// <summary>
     2 /// 根据属性获取对应的属性名称
     3 /// </summary>
     4 /// <typeparam name="T">对象类型</typeparam>
     5 /// <typeparam name="K">对象数据的类型</typeparam>
     6 /// <param name="t">对象</param>
     7 /// <param name="expr">需要获取的属性</param>
     8 /// <returns>属性名</returns>
     9 public static string GetPropertyName<T, K>(this T t, Expression<Func<T, K>> expr)
    10 {
    11     string propertyName = string.Empty;    //返回的属性名
    12     //对象是不是一元运算符
    13     if (expr.Body is UnaryExpression)
    14     {
    15          propertyName = ((MemberExpression)((UnaryExpression)expr.Body).Operand).Member.Name;
    16     }
    17     //对象是不是访问的字段或属性
    18     else if (expr.Body is MemberExpression)
    19     {
    20         propertyName = ((MemberExpression)expr.Body).Member.Name;
    21     }
    22     //对象是不是参数表达式
    23     else if (expr.Body is ParameterExpression)
    24     {
    25         propertyName = ((ParameterExpression)expr.Body).Type.Name;
    26     }
    27     return propertyName;
    28 }                            


    调用

    1 orderId.DataPropertyName = os.GetPropertyName(p => p.OrderId);

    上述方法是一个扩展方法,代码中T表示的是对象的类型,K是对象的类型的具体数据的类型。Expression<Func<T, K>>表示的需要转换的表达式。

    有人可能觉得这样使用是不是会很繁琐,但是细细品味这样做也有一定的好处,那就是不用在开发当中频繁的在数据库与开发环境来回切换了。这个方法的另一种使用方式是在拼接sql字符串语句的时候会频繁使用,因为现在的开发项目都是Model与数据库表字段一一对应的,那么拼接的时候就不用在去数据库中寻找字段,并复制过来,能提升一些开发的效率吧!这只是个人的一点开发经历,如果有不同看法的可以想我提出来,我们共同参考!

  • 相关阅读:
    Eclipse配置方法注释模板
    彻底清除Github上某个文件以及历史
    eclipse快捷键
    Hibernate执行原生SQL
    API接口规范
    eclipse配置google代码风格
    eclipse format xml
    git撤销commit
    使用postman测试文件上传
    centos7下部署elasticSearch集群
  • 原文地址:https://www.cnblogs.com/jx0906/p/2971091.html
Copyright © 2020-2023  润新知