Last active
May 3, 2017 10:42
-
-
Save turgayozgur/d0364cbbe29d392f96d7c00b9842e476 to your computer and use it in GitHub Desktop.
C# Generate Expression to Select with Where
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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