Skip to content

Instantly share code, notes, and snippets.

@brendankowitz
Created June 11, 2015 19:59
Show Gist options
  • Save brendankowitz/974b9c9be70c41d430d1 to your computer and use it in GitHub Desktop.
Save brendankowitz/974b9c9be70c41d430d1 to your computer and use it in GitHub Desktop.
Returns the property name from a lambda expression
using System;
using System.Linq;
using System.Linq.Expressions;
namespace Extensions
{
public class PropertyExtension
{
public static string GetFor<T>(Expression<Func<T>> propertyNameLambda)
{
return GetFor(new[] {propertyNameLambda}).First();
}
public static string[] GetFor<T>(params Expression<Func<T>>[] propertyNameLambda)
{
return propertyNameLambda
.Select(property => property.Body)
.OfType<MemberExpression>()
.Select(member => member.Member.Name)
.Concat(propertyNameLambda
.Select(property => property.Body)
.OfType<UnaryExpression>()
.Select(member => member.Operand)
.OfType<MemberExpression>()
.Select(member => member.Member.Name))
.ToArray();
}
public static string GetFor<T,R>(Expression<Func<T,R>> propertyNameLambda)
{
return GetFor(new[] { propertyNameLambda }).First();
}
public static string[] GetFor<T,R>(params Expression<Func<T,R>>[] propertyNameLambda)
{
return propertyNameLambda
.Select(property => property.Body)
.OfType<MemberExpression>()
.Select(member => member.Member.Name)
.Concat(propertyNameLambda
.Select(property => property.Body)
.OfType<UnaryExpression>()
.Select(member => member.Operand)
.OfType<MemberExpression>()
.Select(member => member.Member.Name))
.ToArray();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment