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));
  • 相关阅读:
    你可能不知道的 transition 技巧与细节
    CSS奇思妙想 -- 使用 CSS 创造艺术
    生僻标签 fieldset 与 legend 的妙用
    CSS 奇思妙想边框动画
    (转)linux命令-- pstack命令(跟踪进程栈)
    (转)PostgreSQL 数据库错误代码解释
    postgresql灾备切换
    (转)postgresql配置参数和概念解释
    (转)PostgreSQL跨库操作Oracle利器-Oracle_fdw
    (转)PG运维常用知识点小结
  • 原文地址:https://www.cnblogs.com/easy5weikai/p/3230134.html
Copyright © 2011-2022 走看看