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号