获取属性名:PropertyNameHelper

  1. namespace NCS.Infrastructure.Querying
  2. {
  3. public static class PropertyNameHelper
  4. {
  5. public static string ResolvePropertyName<T>(Expression<Func<T, object>> expression)
  6. {
  7. var expr = expression.Body as MemberExpression;
  8. if (expr == null)
  9. {
  10. var u = expression.Body as UnaryExpression;
  11. expr = u.Operand as MemberExpression;
  12. }
  13.  
  14. return expr.ToString().Substring(expr.ToString().IndexOf(".") + );
  15. }
  16.  
  17. public static string ResolvePropertyName<T>(Expression<Func<T>> expression)
  18. {
  19. var expr = expression.Body as MemberExpression;
  20. if (expr == null)
  21. {
  22. var u = expression.Body as UnaryExpression;
  23. expr = u.Operand as MemberExpression;
  24. }
  25.  
  26. return expr.ToString().Substring(expr.ToString().IndexOf(".") + );
  27. }
  28. }
  29. }

使用:

  1. /// <summary>
  2. /// 创建Criterion对象,示例1:
  3. /// Criterion.Create<Product>(p=>p.Color.Id, id, CriteriaOperator.Equal);
  4. ///
  5. /// 示例2:类对象中的另一个类对象的属性创建Criterion,
  6. /// 例如DataPoint的一个属性ModuleBelongTo的类型是Module,而Module有int类型的Id属性,
  7. /// 即类的结构如下:
  8. /// DataPoint datapoint = new DataPoint();
  9. /// datapoint.ModuleBelongTo = new Module();
  10. ///
  11. /// 用datapoint.ModuleBelongTo.Id创建Criterion
  12. /// Criterion.Create<DataPoint>(p => p.ModuleBelongTo.Id, 2, CriteriaOperator.Equal)
  13. /// </summary>
  14. /// <typeparam name="T"></typeparam>
  15. /// <param name="expression"></param>
  16. /// <param name="value"></param>
  17. /// <param name="criteriaOperator"></param>
  18. /// <returns></returns>
  19. public static Criterion Create<T>(Expression<Func<T, object>> expression, object value, CriteriaOperator criteriaOperator)
  20. {
  21. string propertyName = PropertyNameHelper.ResolvePropertyName<T>(expression);
  22. Criterion criterion = new Criterion(propertyName, value, criteriaOperator);
  23.  
  24. return criterion;
  25. }
  1. query.AddCriterion(Criterion.Create<DataPointHistoryData>(p => p.DataPoint.Id, request.DataPointId, CriteriaOperator.Equal));

获取属性名:PropertyNameHelper的更多相关文章

  1. HTMLParser获取属性名

    HTMLParser获取属性名方式: 原始网页文本: <a title="美军被曝虐尸" href="http://www.sogou.com/web?query= ...

  2. java中遍历实体类,获取属性名和属性值

    方式一(实体类): //java中遍历实体类,获取属性名和属性值 public static void testReflect(Object model) throws Exception{ for ...

  3. Swift 通过运行时获取属性名列表

    import UIKit //必须要有@objcMembers修饰符,否则获取到的成员属性为0 @objcMembers class Person: NSObject { var name: Stri ...

  4. JS获取对象属性名小结

    最近面试遇到问如何获取对象全部属性名的方法,总结一下: 对象属性类型分类: 1.ESMAScript分类 数据类型 又分为可枚举和不可枚举类型 访问器类型 2.上下文分类 原型属性 实例属性 1.列举 ...

  5. php : 获取对象的属性名

    方案有多种: 一. 使用 get_object_vars() 方法 缺点: 只能显示 public 的 //只显示public的 var_dump(get_object_vars($test)); 处 ...

  6. java反射获取类的类名、属性名、属性类型、方法、执行方法、构造函数

    public class Demo02 { @SuppressWarnings("all") public static void main(String[] args) thro ...

  7. jquery中数组对象下面的属性名名是动态的如何获取

    <script> let normalListData = []; function temp() { for (var i = 0; i < 10; i++) { let rowC ...

  8. SpringBoot08 请求方式、参数获取注解、参数验证、前后台属性名不一致问题、自定义参数验证注解、BeanUtils的使用

    1 请求方式 在定义一个Rest接口时通常会利用GET.POST.PUT.DELETE来实现数据的增删改查:这几种方式有的需要传递参数,后台开发人员必须对接收到的参数进行参数验证来确保程序的健壮性 1 ...

  9. java 反射机制--根据属性名获取属性值

    1.考虑安全访问范围内的属性,没有权限访问到的属性不读取 /** * 根据属性名获取属性值 * * @param fieldName * @param object * @return */ priv ...

随机推荐

  1. firebug调试js时提示调试器未激活处理办法

    firebug是web开发中最常用的分析调试软件,不过我今天使用在调试百度在线编辑器UEditor时一直提示调试器未激活. 从使用经验来看不应该啊,我都下了断点了为什么会提示调试器未激活呢!多次载入网 ...

  2. Linux命令(1):cd命令

    1.作用:改变工作目录: 2.格式:cd  [路径]  其中的路径为要改变的工作目录,可为相对路径或绝对路径 3.使用实例:[root@www uclinux]# cd /home/yourname/ ...

  3. PHP学习笔记 - 入门篇(5)

    PHP学习笔记 - 入门篇(5) 语言结构语句 顺序结构 eg: <?php $shoesPrice = 49; //鞋子单价 $shoesNum = 1; //鞋子数量 $shoesMoney ...

  4. [zz]安装PostgreSQL数据库(Linux篇)

    0.编译环境 Linux: CentOS 5.5 gcc: 4.1.2 1. 安装PostgreSQL 1) 解压postgresql-9.1.7.tar.bz2 #tar jxvf postgres ...

  5. 函数 swap

    1,default swap namespace std { template<typename T> void swap( T& a, T& b) { T temp(a) ...

  6. open_clientfd(char* hostname,int port)和open_listenfd(int port)

    #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h&g ...

  7. 你可以用OpenCV来干什么

    本文翻译自开源图书“OpenCV by Example”中第1章中的“What can you do with OpenCV?”小节. 使用OpenCV,你几乎可以做任何你能够想到的计算机视觉任务.现 ...

  8. 基于Jquery 的 Chart

     Flot  Flot一个纯javascript绘画库,基于jQuery开发.它能够在客户端根据任何数据集快速生成图片.目前只能绘制线状图和柱状. Flot  jQuery  jQchart  基于C ...

  9. Oracle SGA参数调整

    一. SGA的组成: 自动 SGA 管理后,Oracle 可以自动为我们调整以下内存池的大小: shared pool buffer cache large pool java pool stream ...

  10. 开始学习python

    刚刚离开学校,到公司实习,发现所有的技术都是崭新的,所有的工具都是熟悉中带着陌生. 就像是孤身一人到了一个曾经只闻其名的偌大城市,看什么都觉得新鲜,做什么都心有畏惧.幸好 搞软件并没有那么多人情世故, ...