c#通过表达式获取调用的属性名称 & 动态获取列表中特定字段的数据
获取表达式调用的字段名称
/// <summary>
        /// 获取表达式调用的字段名称
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="expr"></param>
        /// <returns></returns>
        private string GetPropertyName<T>(Expression<Func<T, object>> expr)
        {
            switch (expr.Body)
            {
                case MemberExpression memberExpression:
                    return memberExpression.Member.Name;
                case UnaryExpression unaryExpression:
                    if (unaryExpression.Operand is MemberExpression expression)
                    {
                        return expression.Member.Name;
                    }
                    break;
                default:
                    break;
            }
            return "";
        }
调用方法
string desc = GetPropertyName<A>(f => f.Id);
System.Console.WriteLine(desc);
根据名称获取列表中制定字段的所有属性值
/// <summary>
        /// 根据名称获取列表中制定字段的所有属性值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="data"></param>
        /// <param name="propertyName"></param>
        /// <returns></returns>
        public List<TResult> GetData<T, TResult>(List<T> data, string propertyName)
        {
            // 创建表达式树
            var parameter = Expression.Parameter(typeof(T));
            var property = Expression.Property(parameter, propertyName);
            var lambda = Expression.Lambda<Func<T, TResult>>(
                Expression.Convert(property, typeof(TResult)), parameter);
            var selector = lambda.Compile();
            var result = data.Select(selector).ToList();
            return result;
        }
调用
var list=new List<Test>();
GetData(list,"name");
    留待后查,同时方便他人
联系我:renhanlinbsl@163.com
联系我:renhanlinbsl@163.com
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号