【轉】C#通過Expression擷取指定屬性的名稱

來源:互聯網
上載者:User

標籤:blog   http   io   ar   sp   div   on   art   log   

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

 

 

大家所熟悉的是通過對象屬性來訪問該屬性的值,或是由字串通過反射來擷取屬性,並取值。今天我要說的是,通過對象的屬性來擷取該屬性的名稱,其意義在於拼接字串時顯示該名稱,特別是自行拼接 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);

【轉】C#通過Expression擷取指定屬性的名稱

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.