Skip to content

Instantly share code, notes, and snippets.

@mikeobrien
Created December 17, 2010 01:05
Show Gist options
  • Save mikeobrien/744314 to your computer and use it in GitHub Desktop.
Save mikeobrien/744314 to your computer and use it in GitHub Desktop.
private static IEnumerable<UnionVisitor<TQuerySource>.UnionExpression> GetUnionExpressions(Expression expression)
{
Func<Expression, IEnumerable<UnionVisitor<TQuerySource>.UnionExpression>> getVisitorExpressions = x =>
{
var unionVisitor = new UnionVisitor<TQuerySource>();
unionVisitor.Visit(x);
return unionVisitor.Expressions;
};
return GetUnionExpressions(getVisitorExpressions(expression), getVisitorExpressions);
}
private static IEnumerable<UnionVisitor<TQuerySource>.UnionExpression> GetUnionExpressions(
IEnumerable<UnionVisitor<TQuerySource>.UnionExpression> expressions,
Func<Expression, IEnumerable<UnionVisitor<TQuerySource>.UnionExpression>> getExpressions)
{
return expressions.Any() ? expressions.Union(GetUnionExpressions(expressions.SelectMany(x => getExpressions(x.Expression)), getExpressions)) :
Enumerable.Empty<UnionVisitor<TQuerySource>.UnionExpression>();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment