anchor.diff:                  | true, values -> values.Add key
                   | false, _ -> x.ProjectionMap.Add(alias,new ResizeArray<_>(seq{yield key}))
               | _ -> ()
  +            fromColumnGet <- true
               base.VisitMethodCall exp
   
           override __.VisitParameter(exp) = 
  
positive.code:                 // this is a special case when there were no select manys and as a result the projection parameter is just the single entity rather than a tuple
                  // this still includes cases where tuples are created by the user directly, that is fine - it is for avoiding LINQ auto generated tuples
                  singleEntityName <- exp.Parameters.[0].Name
                  match x.ProjectionMap.TryGetValue singleEntityName with
                  | true, values -> ()
                  | false, _ -> x.ProjectionMap.Add(singleEntityName,new ResizeArray<_>())
                  let body = base.Visit exp.Body
                  upcast Expression.Lambda(body,BaseTableParam) 
              else base.VisitLambda exp
  
negative.code:                     else
                          let alias = Utilities.resolveTuplePropertyName exp.Member.Name tupleIndex
                          match x.ProjectionMap.TryGetValue alias with
                          | true, values when fromColumnGet = false -> values.Clear()
                          | false, _ -> x.ProjectionMap.Add(alias,new ResizeArray<_>()) 
                          | _ -> ()
                          (alias,aliasEntityDict.[alias].FullName)
                  fromColumnGet <- false
                  // convert this expression into a GetSubEntity call with the correct alias
                  upcast
                      Expression.Convert(
  