private static IList <MemberInfo> HandleMemberExpressionAndReturnMemberName(MemberExpression memberPropertySelector, PropertySelectionType propertySelectionType, IList <MemberInfo> result = null) { if (result == null) { result = new List <MemberInfo>(); } if (memberPropertySelector.Expression is MemberExpression) { switch (propertySelectionType) { case PropertySelectionType.FirstProperty: return(HandleMemberExpressionAndReturnMemberName(memberPropertySelector.Expression as MemberExpression, propertySelectionType, result)); case PropertySelectionType.LastProperty: result.Add(memberPropertySelector.Member); return(result); case PropertySelectionType.AllProperties: HandleMemberExpressionAndReturnMemberName(memberPropertySelector.Expression as MemberExpression, propertySelectionType, result); result.Add(memberPropertySelector.Member); return(result); default: throw new NotImplementedException(propertySelectionType.ToString()); } } else { result.Add(memberPropertySelector.Member); return(result); } }
public static IList <MemberInfo> PropertyFunctionToPropertyInfo <TSource, TProperty>(Expression <Func <TSource, TProperty> > propertySelector, PropertySelectionType propertySelectionType = PropertySelectionType.FirstProperty) { if (propertySelector.Body is MemberExpression) { return(HandleMemberExpressionAndReturnMemberName(propertySelector.Body as MemberExpression, propertySelectionType)); } else if (propertySelector.Body is UnaryExpression && (propertySelector.Body as UnaryExpression).Operand is MemberExpression) { return(HandleMemberExpressionAndReturnMemberName((propertySelector.Body as UnaryExpression).Operand as MemberExpression, propertySelectionType)); } else { throw new NotImplementedException(); } }
public static IList <MemberInfo> PropertyFunctionToPropertyInfo <T>(Expression <Func <T, object> > propertySelector, PropertySelectionType propertySelectionType = PropertySelectionType.FirstProperty) { return(PropertyFunctionToPropertyInfo <T, object>(propertySelector, propertySelectionType)); }
public static string PropertyFunctionToPropertyName <TSource, TProperty>(Expression <Func <TSource, TProperty> > propertySelector, PropertySelectionType propertySelectionType = PropertySelectionType.FirstProperty) { return(PropertyFunctionToPropertyInfo <TSource, TProperty>(propertySelector, propertySelectionType).ToSeparatedString(p => p.Name, separator: " ")); }
public static string PropertyFunctionToPropertyName <T>(Expression <Func <T, object> > propertySelector, PropertySelectionType propertySelectionType = PropertySelectionType.FirstProperty) { return(PropertyFunctionToPropertyName <T, object>(propertySelector, propertySelectionType)); }