Skip to content

Instantly share code, notes, and snippets.

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