you have hit a limitation that we currently have: In order to leverage the relational server we're trying to push as much as possible to it, and therefore we attempt to do that with your ToCustomer method, which is purely client side.
What you can do is to use an expression of form
return (from empl in ctx.Employees select empl).ToList().Select(x => ToCustomer(x)).ToArray();
The .ToList() will finish and trigger the server side query, and then the resulting list is further been used as input to the Select extension method that can then call your ToCustomer in memory. This has nothing to do with public/private.
As for your second question: The string that is passed as the argument to the context is tried as the name of a connection string in the connection string settings element in your app.config/web.config. If there is no matching entry, it is tried directly as a connection string. If you do not want to change the web.config, you can hardcode it in your app, but this is usually not something I would do. I would prefer the connection string in the web.config as this gives you more flexibility in the deployment.
the Telerik team