標籤: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擷取指定屬性的名稱