Skip to content

Instantly share code, notes, and snippets.

@turgayozgur
Last active May 3, 2017 10:42
Show Gist options
  • Save turgayozgur/d0364cbbe29d392f96d7c00b9842e476 to your computer and use it in GitHub Desktop.
Save turgayozgur/d0364cbbe29d392f96d7c00b9842e476 to your computer and use it in GitHub Desktop.
C# Generate Expression to Select with Where
private IQueryable<T> WhereEqual<T>(IQueryable query, string prop, object param)
{
var select = Expression.Parameter(typeof(T), "select");
MemberExpression property = null;
foreach (var node in prop.Split('.'))
{
property = property == null
? Expression.Property(select, node)
: Expression.Property(property, node);
}
var expression = Expression.Equal(property, Expression.Constant(param));
var where = Expression.Call(
typeof(Queryable),
"Where",
new[] { query.ElementType },
query.Expression,
Expression.Lambda<Func<T, bool>>(expression, select));
return query.Provider.CreateQuery<T>(where);
}
/* Usage:
*
* var query = from customer in customers select new Wrapper { Customer = customer };
* query = WhereEqual<Wrapper>(query, "Customer.Id", id);
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment