SqlFunctions.StringConvert буде працювати, але я вважаю, що це громіздко, і в більшості випадків у мене немає реальної потреби в перетворенні рядків на стороні SQL.
Що я роблю, якщо хочу зробити маніпуляції з рядком - це спочатку виконати запит у linq-to-subjekt, а потім маніпулювати струнами в 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. Також майте на увазі, що за цей метод, ймовірно, існує покарання за ефективність.