SqlFunctions.StringConvert funcionará, pero me resulta engorroso, y la mayoría de las veces, no tengo una necesidad real de realizar la conversión de cadenas en el lado de SQL.
Lo que hago si quiero hacer manipulaciones de cadenas es realizar primero la consulta en linq-to-persons, luego manipular las picaduras en linq-to-objects. En este ejemplo, quiero obtener un conjunto de datos que contengan el nombre completo de un contacto y ContactLocationKey, que es la concatenación de cadenas de dos columnas enteras (ContactID y LocationID).
// perform the linq-to-entities query, query execution is triggered by ToArray()
var data =
(from c in Context.Contacts
select new {
c.ContactID,
c.FullName,
c.LocationID
}).ToArray();
// at this point, the database has been called and we are working in
// linq-to-objects where ToString() is supported
// Key2 is an extra example that wouldn't work in linq-to-entities
var data2 =
(from c in data
select new {
c.FullName,
ContactLocationKey = c.ContactID.ToString() + "." + c.LocationID.ToString(),
Key2 = string.Join(".", c.ContactID.ToString(), c.LocationID.ToString())
}).ToArray();
Ahora, reconozco que se vuelve engorroso tener que escribir dos selecciones anónimas, pero argumentaría que esto se ve superado por la conveniencia de que puede realizar funciones de cadena (y otras) no admitidas en L2E. También tenga en cuenta que probablemente haya una penalización de rendimiento al usar este método.