QueryablePattern<TSource1, TSource2, TSource3>
Represents a join pattern over three observable sequences.
            
                using System.Linq.Expressions;
using System.Reactive.Linq;
using System.Reflection;
namespace System.Reactive.Joins
{
    public class QueryablePattern<TSource1, TSource2, TSource3> : QueryablePattern
    {
        internal QueryablePattern(Expression expression)
            : base(expression)
        {
        }
        public QueryablePattern<TSource1, TSource2, TSource3, TSource4> And<TSource4>(IObservable<TSource4> other)
        {
            if (other == null)
                throw new ArgumentNullException("other");
            MethodInfo method = typeof(QueryablePattern<TSource1, TSource2, TSource3>).GetMethod("And").MakeGenericMethod(typeof(TSource4));
            return new QueryablePattern<TSource1, TSource2, TSource3, TSource4>((Expression)Expression.Call(base.Expression, method, Qbservable.GetSourceExpression<TSource4>(other)));
        }
        public QueryablePlan<TResult> Then<TResult>(Expression<Func<TSource1, TSource2, TSource3, TResult>> selector)
        {
            if (selector == null)
                throw new ArgumentNullException("selector");
            MethodInfo method = typeof(QueryablePattern<TSource1, TSource2, TSource3>).GetMethod("Then").MakeGenericMethod(typeof(TResult));
            return new QueryablePlan<TResult>((Expression)Expression.Call(base.Expression, method, selector));
        }
    }
}