LINQ para entidades StringConvert (double) 'não pode ser convertido para converter int em string
Problem
Precisa converter int para string usando EF4 + SQL CE4. A opção recomendada de usar SqlFunctions.StringConvert (double) ainda gera erros.
Opção (original). Isso me dá um erro:
public static IEnumerable<SelectListItem> xxGetCustomerList()
{
using (DatabaseEntities db = new DatabaseEntities())
{
var list = from l in db.Customers
orderby l.CompanyName
select new SelectListItem { Value = l.CustomerID.ToString(), Text = l.CompanyName };
return list.ToList();
}
}
Opção (mais sugerido). Então, como muitas postagens sugerem, usei a função SqlFunctions.StringConvert () da biblioteca System.Data.Objects.SqlClient:
public static IEnumerable<SelectListItem> GetCustomerList()
{
using (DatabaseEntities db = new DatabaseEntities())
{
var list = from l in db.Customers
orderby l.CompanyName
select new SelectListItem { Value = SqlFunctions.StringConvert((double)l.CustomerID), Text = l.CompanyName };
return list.ToList();
}
}
Que agora mostra o erro abaixo:
The specified method 'System.String StringConvert(System.Nullable`1[System.Double])' on the type 'System.Data.Objects.SqlClient.SqlFunctions' cannot be translated into a LINQ to Entities store expression.
Option 3 (para casos muito específicos). Então, o post do anoter mostra uma solução inteligente usando o Dictionary, que finalmente funcion
public static IEnumerable<SelectListItem> xGetCustomerList()
{
using (DatabaseEntities db = new DatabaseEntities())
{
var customers = db.Customers.ToDictionary(k => k.CustomerID, k => k.CompanyName);
var list = from l in customers
orderby l.Value
select new SelectListItem { Value = l.Key.ToString(), Text = l.Value };
return list.ToList();
}
}
Mas funciona apenas para valores simples de pares (chave, valor). Alguém pode me ajudar com outra solução ou o que estou fazendo de errado com a opção 2?
E espero que a Microsoft em breve conserte a EF antes de nos pressionar a deixar o L2S, que já é estável e muito mais maduro. Na verdade, estou usando o EF4 só porque quero usar o SQL CE, caso contrário, fico com o L2