SqlFunctions.StringConvert будет работать, но я считаю его громоздким, и большую часть времени у меня нет реальной необходимости выполнять преобразование строк на стороне SQL.
Что я делаю, если я хочу выполнять строковые манипуляции, так это сначала выполнять запрос в linq-to-entity, а затем манипулировать строками в linq-to-objects. В этом примере я хочу получить набор данных, содержащий полное имя Контакта и ContactLocationKey, который является конкатенацией строк двух столбцов Integer (ContactID и 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();
Теперь я допускаю, что писать два анонимных выбора становится громоздким, но я бы сказал, что это перевешивает удобство, с которым вы можете выполнять строковые (и другие) функции, не поддерживаемые в L2E. Также имейте в виду, что при использовании этого метода возможно снижение производительности.