C#通過Expression獲取指定屬性的名稱


大家所熟悉的是通過對象屬性來訪問該屬性的值,或是由字符串通過反射來獲取屬性,並取值。今天我要說的是,通過對象的屬性來獲取該屬性的名稱,其意義在於拼接字符串時顯示該名稱,特別是自行拼接 SQL語句。下列代碼是個簡單測試類:

 

public class TestClass  
    {          
        public int ID { get; set; }  
  
        public string Name { get; set; }  
  
        public DateTime CreateDate { get; set; }  
 } 

 

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、通過對象的屬性反向獲取該屬性的名稱

 

    using System.Linq.Expressions;  
            public static string GetPropertyName<T>(Expression<Func<T,object>> 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< TestClass >(p=>p.ID)) ; //輸出的是 "ID" 兩字母  
    Response.Write(GetPropertyName< TestClass >(p=>p. Name)) ; //輸出的是 "Name" 四個字母  
    Response.Write(GetPropertyName< TestClass >(p=>p)) ; //輸出的是 "TestClass" 九個字母  

 

第三種常用在拼接自定義 SQL語句或是動態 SQL中,例如:

var sql = "select a.ID,a.Name from dbo.TestClass";就可以這樣寫了

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

 

引用自:http://blog.csdn.net/cityhunter172/article/details/8177499

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM