public static Expression Collate(Expression expression) { var visitor = new SqlIncludeExpressionCollator(); var result = visitor.Visit(expression); foreach (var keyValue in visitor.includeExpressionsBySource) { var source = keyValue.Key; var expressions = keyValue.Value; var newSource = Expression.Call(MethodInfoFastRef.QueryableExtensionsIncludeManyMethod.MakeGenericMethod(source.Type.GetSequenceElementType()), source, Expression.NewArrayInit(typeof(LambdaExpression), expressions)); result = SqlExpressionReplacer.Replace(result, source, newSource); } return result; }
public static Expression Collate(Expression expression) { var visitor = new SqlIncludeExpressionCollator(); var result = visitor.Visit(expression); foreach (var keyValue in visitor.includeExpressionsBySource) { var source = keyValue.Key; var expressions = keyValue.Value; var newSource = Expression.Call(MethodInfoFastRef.QueryableExtensionsIncludeManyMethod.MakeGenericMethod(source.Type.GetSequenceElementType()), source, Expression.NewArrayInit(typeof(LambdaExpression), expressions)); result = SqlExpressionReplacer.Replace(result, source, newSource); } return(result); }