nuget-extensions/nuget-commands/src.2.8/QueryBuilder.cs [45:76]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .ToList(); while (expressions.Count > 1) { var left = expressions.Where((x, i) => i % 2 == 0).ToList(); var right = expressions.Where((x, i) => i % 2 == 1).ToList(); expressions = ZipEx(left, right, Expression.Or).ToList(); } if (expressions.Count == 0) return Expression.Constant(true); return expressions.Single(); } private static IEnumerable ZipEx(IEnumerable left, IEnumerable right, Func zip) { var enuLeft = left.GetEnumerator(); var enuRight = right.GetEnumerator(); bool hasLeft; bool hasRight; do { hasLeft = enuLeft.MoveNext(); hasRight = enuRight.MoveNext(); if (hasLeft && hasRight) yield return zip(enuLeft.Current, enuRight.Current); else if (hasLeft) yield return enuLeft.Current; else if (hasRight) yield return enuRight.Current; } while (hasLeft || hasRight); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - nuget-extensions/nuget-commands/src/QueryBuilder.cs [45:76]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .ToList(); while (expressions.Count > 1) { var left = expressions.Where((x, i) => i % 2 == 0).ToList(); var right = expressions.Where((x, i) => i % 2 == 1).ToList(); expressions = ZipEx(left, right, Expression.Or).ToList(); } if (expressions.Count == 0) return Expression.Constant(true); return expressions.Single(); } private static IEnumerable ZipEx(IEnumerable left, IEnumerable right, Func zip) { var enuLeft = left.GetEnumerator(); var enuRight = right.GetEnumerator(); bool hasLeft; bool hasRight; do { hasLeft = enuLeft.MoveNext(); hasRight = enuRight.MoveNext(); if (hasLeft && hasRight) yield return zip(enuLeft.Current, enuRight.Current); else if (hasLeft) yield return enuLeft.Current; else if (hasRight) yield return enuRight.Current; } while (hasLeft || hasRight); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -