zoukankan      html  css  js  c++  java
  • 获取属性名:PropertyNameHelper

    获取属性名:PropertyNameHelper

    namespace NCS.Infrastructure.Querying
    {
        public static class PropertyNameHelper
        {
            public static string ResolvePropertyName<T>(Expression<Func<T, object>> expression)
            {
                var expr = expression.Body as MemberExpression;
                if (expr == null)
                {
                    var u = expression.Body as UnaryExpression;
                    expr = u.Operand as MemberExpression;
                }
    
                return expr.ToString().Substring(expr.ToString().IndexOf(".") + 1);
            }
    
            public static string ResolvePropertyName<T>(Expression<Func<T>> expression)
            {
                var expr = expression.Body as MemberExpression;
                if (expr == null)
                {
                    var u = expression.Body as UnaryExpression;
                    expr = u.Operand as MemberExpression;
                }
    
                return expr.ToString().Substring(expr.ToString().IndexOf(".") + 1);
            }
        }
    }

    使用:

            /// <summary>
            /// 创建Criterion对象,示例1:
            /// Criterion.Create<Product>(p=>p.Color.Id, id, CriteriaOperator.Equal);
            /// 
            /// 示例2:类对象中的另一个类对象的属性创建Criterion,
            /// 例如DataPoint的一个属性ModuleBelongTo的类型是Module,而Module有int类型的Id属性,
            /// 即类的结构如下:
            /// DataPoint datapoint = new DataPoint();
            /// datapoint.ModuleBelongTo = new Module();
            /// 
            /// 用datapoint.ModuleBelongTo.Id创建Criterion
            /// Criterion.Create<DataPoint>(p => p.ModuleBelongTo.Id, 2, CriteriaOperator.Equal)
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="expression"></param>
            /// <param name="value"></param>
            /// <param name="criteriaOperator"></param>
            /// <returns></returns>
            public static Criterion Create<T>(Expression<Func<T, object>> expression, object value, CriteriaOperator criteriaOperator)
            {
                string propertyName = PropertyNameHelper.ResolvePropertyName<T>(expression);
                Criterion criterion = new Criterion(propertyName, value, criteriaOperator);
    
                return criterion;
            }
                    query.AddCriterion(Criterion.Create<DataPointHistoryData>(p => p.DataPoint.Id, request.DataPointId, CriteriaOperator.Equal));
  • 相关阅读:
    如何去掉myeclipse的web项目启动时出现的 CodeLive Panel
    day35_Spring学习回顾_03
    在CentOS/RHEL上设置SSH免密码登录
    超全Linux备份工具集合,满足你的所有需要!
    使用Gnupg对Linux系统中的文件进行加密
    Linux压缩那些事儿
    或许是 Nginx 上配置 HTTP2 最实在的教程了
    Systemd 三部曲 之 PHP7
    Linux kernel模块管理相关详解
    搜狐视频Redis私有云平台CacheCloud
  • 原文地址:https://www.cnblogs.com/easy5weikai/p/3230134.html
Copyright © 2011-2022 走看看