KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am trying to mimick the left outer join here but using dynamic linq extension methods. What i have: public static IQueryable SelectMany(this IQueryable source, string selector, string resultsSelector, params object[] values) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); // Parse the lambda LambdaExpression lambda = DynamicExpression.ParseLambda( source.ElementType, null, selector, values); // Fix lambda by recreating to be of correct Func<> type in case // the expression parsed to something other than IEnumerable<T>. // For instance, a expression evaluating to List<T> would result // in a lambda of type Func<T, List<T>> when we need one of type // an Func<T, IEnumerable<T> in order to call SelectMany(). Type inputType = source.Expression.Type.GetGenericArguments()[0]; Type resultType = lambda.Body.Type.GetGenericArguments()[0]; Type enumerableType = typeof(IEnumerable<>).MakeGenericType(resultType); Type delegateType = typeof(Func<,>).MakeGenericType(inputType, enumerableType); lambda = Expression.Lambda(delegateType, lambda.Body, lambda.Parameters); ParameterExpression[] parameters = new ParameterExpression[] { Expression.Parameter(source.ElementType, "outer"), Expression.Parameter(resultType, "inner") }; LambdaExpression resultsSelectorLambda = DynamicExpression.ParseLambda( parameters, null, resultsSelector, values); // Create the new query return source.Provider.CreateQuery(Expression.Call(typeof(Queryable), "SelectMany", new Type[] { source.ElementType, resultType, resultsSelectorLambda.Body.Type
Tags (comma-separated)
Save Edits
Cancel