SqlFunctions.StringConvert funcionará, mas acho complicado e, na maioria das vezes, não tenho uma necessidade real de realizar a conversão de string no lado SQL.
O que faço se quiser manipular seqüências de caracteres é executar primeiro a consulta no linq-to-entity e depois manipular as picadas no linq-to-objects. Neste exemplo, desejo obter um conjunto de dados contendo o nome completo de um contato e ContactLocationKey, que é a concatinação de seqüência de caracteres de duas colunas Inteiras (ContactID e 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();
Agora, admito que é complicado ter que escrever duas seleções anônimas, mas eu argumentaria que isso é superado pela conveniência de que você pode executar funções de string (e outras) não suportadas no L2E. Lembre-se também de que provavelmente existe uma penalidade de desempenho usando esse método.