//
 // Summary:
 //     Correlates the elements of two sequences based on matching keys. The default
 //     equality comparer is used to compare keys.
 //
 // Parameters:
 //   outer:
 //     The first sequence to join.
 //
 //   inner:
 //     The sequence to join to the first sequence.
 //
 //   outerKeySelector:
 //     A function to extract the join key from each element of the first sequence.
 //
 //   innerKeySelector:
 //     A function to extract the join key from each element of the second sequence.
 //
 //   resultSelector:
 //     A function to create a result element from two matching elements.
 //
 // Type parameters:
 //   TOuter:
 //     The type of the elements of the first sequence.
 //
 //   TInner:
 //     The type of the elements of the second sequence.
 //
 //   TKey:
 //     The type of the keys returned by the key selector functions.
 //
 //   TResult:
 //     The type of the result elements.
 //
 // Returns:
 //     An System.Collections.Generic.IEnumerable`1 that has elements of type TResult
 //     that are obtained by performing an inner join on two sequences.
 //
 // Exceptions:
 //   T:System.ArgumentNullException:
 //     outer or inner or outerKeySelector or innerKeySelector or resultSelector is null.
 public BusinessQueryEnumerableResult <TResult> Join <TInner, TJoinKey, TResult>(BusinessQueryEnumerableResult <TInner> inner, Expression <Func <TEntry, TJoinKey> > outerKeySelector, Expression <Func <TInner, TJoinKey> > innerKeySelector, Expression <Func <TEntry, TInner, TResult> > resultSelector)
     where TResult : class
     where TInner : class
 {
     return(new BusinessQueryEnumerableResult <TResult>(FinalizeQuery().Join(inner.GetQuery(), outerKeySelector, innerKeySelector, resultSelector)));
 }
 public BusinessQueryEnumerableResult <Result> Union(BusinessQueryEnumerableResult <Result> second)
 {
     Query = Query.Union(second.Query);
     return(this);
 }
 //
 // Summary:
 //     Applies a specified function to the corresponding elements of two sequences,
 //     producing a sequence of the results.
 //
 // Parameters:
 //   first:
 //     The first sequence to merge.
 //
 //   second:
 //     The second sequence to merge.
 //
 //   resultSelector:
 //     A function that specifies how to merge the elements from the two sequences.
 //
 // Type parameters:
 //   TFirst:
 //     The type of the elements of the first input sequence.
 //
 //   TSecond:
 //     The type of the elements of the second input sequence.
 //
 //   TResult:
 //     The type of the elements of the result sequence.
 //
 // Returns:
 //     An System.Collections.Generic.IEnumerable`1 that contains merged elements of
 //     two input sequences.
 //
 // Exceptions:
 //   T:System.ArgumentNullException:
 //     first or second is null.
 public BusinessQueryEnumerableResult <TResult> Zip <TSecond, TResult>(BusinessQueryEnumerableResult <TSecond> second, Expression <Func <TEntry, TSecond, TResult> > resultSelector)
     where TResult : class
     where TSecond : class
 {
     return(new BusinessQueryEnumerableResult <TResult>(FinalizeQuery().Zip(second.GetQuery(), resultSelector)));
 }