【转】C#通过Expression获取指定属性的名称

2020-12-13 16:38

阅读:630

标签:blog   http   io   ar   sp   div   on   art   log   

原文:http://www.cnblogs.com/powerwu/articles/3393582.html

 

 

大家所熟悉的是通过对象属性来访问该属性的值,或是由字符串通过反射来获取属性,并取值。今天我要说的是,通过对象的属性来获取该属性的名称,其意义在于拼接字符串时显示该名称,特别是自行拼接 SQL语句。下列代码是个简单测试类:

 

soscw.com,搜素材
public class TestClass  
    {          
        public int ID { get; set; }  
  
        public string Name { get; set; }  
  
        public DateTime CreateDate { get; set; }  
 } 
soscw.com,搜素材

 

1、直接访问属性值

 

var obj = new TestClass ();  
Response.Write(obj.ID) ; 

 

2、由字符串获取指定的属性值

using System.Reflection;  
  
var obj = new TestClass ();  
Response.Write(obj.GetType().GetProperty("ID").GetValue()) ; 

3、通过对象的属性反向获取该属性的名称

 

soscw.com,搜素材
    using System.Linq.Expressions;  
            public static string GetPropertyName(Expression> expr)  
            {  
                var rtn = "";  
                if (expr.Body is UnaryExpression)  
                {  
                    rtn = ((MemberExpression)((UnaryExpression)expr.Body).Operand).Member.Name;  
                }  
                else if (expr.Body is MemberExpression)  
                {  
                    rtn = ((MemberExpression)expr.Body).Member.Name;  
                }  
                else if (expr.Body is ParameterExpression)  
                {  
                    rtn = ((ParameterExpression)expr.Body).Type.Name;  
                }  
                return rtn;  
        }  
      
    Response.Write(GetPropertyName(p=>p.ID)) ; //输出的是 "ID" 两字母  
    Response.Write(GetPropertyName(p=>p. Name)) ; //输出的是 "Name" 四个字母  
    Response.Write(GetPropertyName(p=>p)) ; //输出的是 "TestClass" 九个字母  
soscw.com,搜素材

 

第三种常用在拼接自定义 SQL语句或是动态 SQL中,例如:

var sql = "select a.ID,a.Name from dbo.TestClass";就可以这样写了

var sql = "select a. " + GetPropertyName(p=>p.ID)+",a." + GetPropertyName(p=>p. Name)+ " from dbo." + GetPropertyName(p=>p);

【转】C#通过Expression获取指定属性的名称

标签:blog   http   io   ar   sp   div   on   art   log   

原文地址:http://www.cnblogs.com/gossip/p/4084718.html


评论


亲,登录后才可以留言!