public static IQuery <T> ApplySelectsAndExpands <T>(IQuery <T> query, LambdaExpression lambda) where T : class { var queryModifiers = ExpressionUtils.ExpandLambdaExpression(lambda).SelectMany(z => ExpressionUtils.ParseToQuery(lambda.Parameters[0], z)).ToList(); IQuery <T> modifiedQuery = query; IEnumerable <string> selects = queryModifiers.Where(mod => mod.ModType == QueryModifierType.Select).Select(mod => mod.Property).Distinct().OrderBy(s => s.Length); foreach (string select in selects) { modifiedQuery = modifiedQuery.Select(select); } IEnumerable <string> expands = queryModifiers.Where(mod => mod.ModType == QueryModifierType.Expand).Select(mod => mod.Property).Distinct().OrderBy(s => s.Length); foreach (string expand in expands) { modifiedQuery = modifiedQuery.Expand(expand); } return(modifiedQuery); }