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

原文: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);

时间: 2024-08-16 06:52:04

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

获取指定元素的某一个样式属性值

1."元素.style.样式属性名" ->oDiv.style.height 弊端:"只能"获取在"行内"上编写过的样式,不管在哪些了对应的样式,只要没有在行内上写过,都获取不到 oDiv.style.height 由于height并没有写在行内样式上(写在样式表里了),所以获取的结果依然是"" 2.通过 window.getComputedStyle 获取所有经过浏览器计算的样式(只要的你的元素在浏览器加载的时候渲染过

java正则表达式获取指定HTML标签的指定属性值

package com.mmq.regex; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @use 获取指定HTML标签的指定属性的值 * @FullName com.mmq.regex.MatchHtmlElementAttrValue.java </br> * @JDK 1.6.0 </b

JAVA获取指定标签的属性值

package com.zving.teachPlat.util; import java.io.InputStream;import java.net.URL;import java.net.URLConnection;import java.util.regex.Matcher;import java.util.regex.Pattern;import com.zving.framework.utility.StringUtil; public class MatchUtil { /** *

jQuery如何获取指定type属性值的input元素

jQuery遍历input文本框并获取input的name属性值:因为input标签的type属性是多种多样的,例如text.radio.checkbox等,但是实际应用中往往需要获取某一类属性值的input元素,下面就通过实例简单介绍一下.代码实例如下: $("input:text", document.forms[0]).each(function(){alert(this.name)}); 以上代码可以获取type属性值为text的input元素,并且遍历弹出它们的name属性值

根据查询实体获取指定返回列的值

一步步完善并优化自己的ORM框架功能 [新增] /// <summary> /// 根据查询实体获取指定返回列的值 /// </summary> /// <typeparam name="SearchT">查询实体类</typeparam> /// <typeparam name="ResultT">返回实体类</typeparam> /// <param name="searc

获取指定表的创建脚本

--****************************************************************************-- 软件名称: May Flower Erp-- 版权所有: (C) 2005-2006 May Flower ERP 开发组-- 功能描述: 获取指定表的创建脚本,包括表和字段的属性.外键(注释掉的)----------------------------------------------------------------------

java中获取系统属性以及环境变量

java中获取系统属性以及环境变量 System.getEnv()和System.getProperties()的差别 从概念上讲,系统属性 和环境变量 都是名称与值之间的映射.两种机制都能用来将用户定义的信息传递给 Java 进程.环境变量产生很多其它的全局效应,由于它们不仅对Java 子进程可见,并且对于定义它们的进程的全部子进程都是可见的.在不同的操作系统上,它们的语义有细微的区别,比方,不区分大写和小写.由于这些原因,环境变量更可能有意料不到的副作用.最好在可能的地方使用系统属性.环境变

获取指定的元素节点

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <titl

Oracle中使用游标获取指定数据表的所有字段名对应的字符串

操作步骤:打开PLSQL Developer后,直接执行下面的语句就可以出来 --Oracle中使用游标获取指定数据表的所有字段名对应的字符串 declare mytablename VARCHAR(255):='STAFFDOC'; --定义要查询的数据表名变量,STAFFDOC为我测试用的数据表名,请修改成您的数据库中的对应数据表名字mystring NVARCHAR2(4000):=''; --定义要输出的字符串变量 cursor mycursor is --定义游标          s