/*----------------------------------------------------------------
 * 作    者 :姜  彦 
 * 项目名称 :Utility.Data
 * 类 名 称 :AliasAsAttribute 
 * 命名空间 :Utility.Data
 * CLR 版本 :4.0.30319.42000
 * 创建时间 :2019/11/8 18:28:06
 * 当前版本 :1.0.0.0
 * WeChatQQ :771078740
 * My Email :jiangyan2008.521@gmail.com 
 *            jiangyan2008.521@qq.com  
 * 描述说明 : 
 * 
 * 修改历史 : 
 * 
*******************************************************************
 * Copyright @ JiangYan 2019. All rights reserved.
*******************************************************************
------------------------------------------------------------------*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;

namespace Utility.Data
{
    /// <summary>
    /// 重命名特性
    /// </summary>
    [AttributeUsage(AttributeTargets.Property)]
    public class AliasAsAttribute : Attribute
    {
        #region Construction

        /// <summary>
        /// 构造函数
        /// </summary>
        public AliasAsAttribute(string name)
        {
            _name = name;
        }

        private string _name;

        #endregion      

        #region Property

        public string Name { get { return _name; } }

        #endregion Property       
    }


    public static class AliasEx
    {
        /// <summary>
        /// 获取AliasAs特性值
        /// </summary>
        /// <typeparam name="T">泛型对象</typeparam>
        /// <param name="obj">泛型单个对象</param>
        /// <param name="expr">Lambda表达式</param>
        /// <returns></returns>
        public static string AliasAs<T>(this T obj, Expression<Func<T, object>> expr)
        {
            var strPropertyAlias = string.Empty;//属性的别名特性
            if (expr.Body is UnaryExpression)
            {
                var body = (MemberExpression)((UnaryExpression)expr.Body).Operand;
                var attr = body.Member.CustomAttributes.FirstOrDefault(t => t.AttributeType == typeof(AliasAsAttribute));
                if (attr == null)
                    strPropertyAlias = body.Member.Name;
                else
                    strPropertyAlias = attr.ConstructorArguments.FirstOrDefault().Value.ToString();
            }
            else if (expr.Body is MemberExpression)
            {
                var body = expr.Body as MemberExpression;
                var attr = body.Member.CustomAttributes.FirstOrDefault(t => t.AttributeType == typeof(AliasAsAttribute));
                if (attr == null)
                    strPropertyAlias = body.Member.Name;
                else
                    strPropertyAlias = attr.ConstructorArguments.FirstOrDefault().Value.ToString();
            }
            else if (expr.Body is ParameterExpression)
            {

                var body = expr.Body as ParameterExpression;
                var attr = body.Type.CustomAttributes.FirstOrDefault(t => t.AttributeType == typeof(AliasAsAttribute));
                if (attr == null)
                    strPropertyAlias = body.Type.Name;
                else
                    strPropertyAlias = attr.ConstructorArguments.FirstOrDefault().Value.ToString();
            }
            return strPropertyAlias;
        }

        /// <summary>
        /// 获取AliasAs特性值
        /// </summary>
        /// <typeparam name="T">泛型对象</typeparam>
        /// <param name="obj">泛型对象列表</param>
        /// <param name="expr">Lambda表达式</param>
        /// <returns></returns>
        public static string AliasAs<T>(this IEnumerable<T> obj, Expression<Func<T, object>> expr)
        {
            var strPropertyAlias = string.Empty;//属性的别名特性
            if (expr.Body is UnaryExpression)
            {
                var body = (MemberExpression)((UnaryExpression)expr.Body).Operand;
                var attr = body.Member.CustomAttributes.FirstOrDefault(t => t.AttributeType == typeof(AliasAsAttribute));
                if (attr == null)
                    strPropertyAlias = body.Member.Name;
                else
                    strPropertyAlias = attr.ConstructorArguments.FirstOrDefault().Value.ToString();
            }
            else if (expr.Body is MemberExpression)
            {
                var body = expr.Body as MemberExpression;
                var attr = body.Member.CustomAttributes.FirstOrDefault(t => t.AttributeType == typeof(AliasAsAttribute));
                if (attr == null)
                    strPropertyAlias = body.Member.Name;
                else
                    strPropertyAlias = attr.ConstructorArguments.FirstOrDefault().Value.ToString();
            }
            else if (expr.Body is ParameterExpression)
            {

                var body = expr.Body as ParameterExpression;
                var attr = body.Type.CustomAttributes.FirstOrDefault(t => t.AttributeType == typeof(AliasAsAttribute));
                if (attr == null)
                    strPropertyAlias = body.Type.Name;
                else
                    strPropertyAlias = attr.ConstructorArguments.FirstOrDefault().Value.ToString();
            }
            return strPropertyAlias;
        }
    }
}

/*----------------------------------------------------------------
 * 备    注 :
 * 
 * 
 * 
*******************************************************************
 * Copyright @ JiangYan 2019. All rights reserved.
*******************************************************************
------------------------------------------------------------------*/

 

相关文章:

  • 2022-12-23
  • 2021-05-20
  • 2021-07-28
  • 2021-08-21
  • 2021-06-24
  • 2021-06-12
  • 2021-12-01
猜你喜欢
  • 2022-12-23
  • 2021-06-11
  • 2021-04-21
  • 2022-01-02
  • 2021-06-10
  • 2022-02-04
相关资源
相似解决方案