internal static IEnumerable <LogicalItem> Convert(ExpressionTreeBase item) { JoiningType? type; bool negate; ConditionalExpression lastParent; ExpressionTreeBase actualItem = ExtractItem(item, out type, out negate, out lastParent); LogicalItem result; if (actualItem is SelectorExpression) { result = new LogicalSelector((SelectorExpression)actualItem); } else if (actualItem is ConditionGroup) { result = new LogicalGroup((ConditionGroup)actualItem); } else { throw new Exception(); } result.Negated = negate; result.JoiningType = type ?? JoiningType.And; yield return(result); if (lastParent != null) { foreach (LogicalItem current in lastParent.AdditionalConditions.SelectMany(x => Convert(x))) { yield return(current); } } }
internal static IEnumerable<LogicalItem> Convert(ExpressionTreeBase item) { JoiningType? type; bool negate; ConditionalExpression lastParent; ExpressionTreeBase actualItem = ExtractItem(item, out type, out negate, out lastParent); LogicalItem result; if (actualItem is SelectorExpression) { result = new LogicalSelector((SelectorExpression)actualItem); } else if (actualItem is ConditionGroup) { result = new LogicalGroup((ConditionGroup)actualItem); } else { throw new Exception(); } result.Negated = negate; result.JoiningType = type ?? JoiningType.And; yield return result; if (lastParent != null) { foreach (LogicalItem current in lastParent.AdditionalConditions.SelectMany(x => Convert(x))) { yield return current; } } }