public bool Select <TSelect>(Action <MemoryNode <TSelect> > callback) where TSelect : class { if (typeof(TSelect) == typeof(Tuple <T1, T2>) && _node == null) { _next.MatchJoinNode <T1>(t1 => { _next.MatchJoinNode <T2>(t2 => { _configurator.MatchOuterJoinNode(t1, t2, outerJoin => { // finally! _node = outerJoin; }); }); }); } var node = _node as MemoryNode <TSelect>; if (node != null) { callback(node); return(true); } return(false); }