需要的自取,有的场景真的能救命。
/// <summary>
/// 获取表达式属性列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="exp"></param>
/// <returns></returns>
public static List<string> GetExpressionPropertyNames<T>(this Expression<Func<T, object>> exp)
{
var result = SelectMembers(exp.Body).Select(t => t.Name).ToList();
return result;
}
private static List<MemberInfo> SelectMembers(Expression properties)
{
var newExp = properties as NewExpression;
if (newExp != null && newExp.Members != null)
{
return newExp.Members.ToList();
}
else
{
var newArr = properties as NewArrayExpression;
if (newArr != null)
{
List<MemberInfo> newArrMembers = new List<MemberInfo>();
foreach (var newArrExp in newArr.Expressions)
newArrMembers.AddRange(SelectMembers(newArrExp));
return newArrMembers.Distinct().ToList();
}
return null;
}
}