博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】C#通过Expression获取指定属性的名称
阅读量:6091 次
发布时间:2019-06-20

本文共 1758 字,大约阅读时间需要 5 分钟。

原文:

 

 

大家所熟悉的是通过对象属性来访问该属性的值,或是由字符串通过反射来获取属性,并取值。今天我要说的是,通过对象的属性来获取该属性的名称,其意义在于拼接字符串时显示该名称,特别是自行拼接 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
(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< 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://enlwa.baihongyu.com/

你可能感兴趣的文章
DEVEXPRESS 随记
查看>>
Ember.js 入门指南——{{action}} 助手
查看>>
VMware下安装QT Creator
查看>>
Linux时间同步设置
查看>>
Measure Graphics Performance
查看>>
RetrunMoreRow
查看>>
Redis学习笔记(3)-Hash
查看>>
Git使用的常用命令
查看>>
微软职位内部推荐-Senior Software Engineer
查看>>
多线程开发
查看>>
成功搞定一个通用的Extjs增删改查模块
查看>>
暴力屏蔽80访问失败的用户
查看>>
营销型后台系统开发应该考虑到的
查看>>
vue-admin-template 切换回中文
查看>>
java模式之模板模式——抽象类
查看>>
[ACM] hdu 1251 统计难题 (字典树)
查看>>
调试json
查看>>
C - Surprising Strings
查看>>
hibernate里的generator中class =value介绍
查看>>
activity-alias的使用
查看>>