Задача
Необходимо преобразовать int в строку, используя EF4 + SQL CE4. Рекомендуемый вариант использования SqlFunctions.StringConvert (double) по-прежнему дает мне ошибки.
Вариант 1 (оригинал). Это дает мне ошибку:
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();
}
}
Вариант 2 (наиболее рекомендуемый). Затем, как подсказывают многие посты, я использовал функцию SqlFunctions.StringConvert () из библиотеки 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();
}
}
Который теперь показывает ниже ошибку:
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.
Вариант 3 (для очень специфического случая). Затем в другом посте показано умное решение с использованием словаря, которое наконец работает:
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();
}
}
Но работают только для простых парных значений (ключ, значение). Может кто-нибудь помочь мне с другим решением или что я делаю не так с вариантом 2?
И я надеюсь, что Microsoft скоро сделает EF прямо перед тем, как подтолкнуть нас к переходу с L2S, который уже стабилен и гораздо более зрел. Я на самом деле использую EF4 только потому, что хочу использовать SQL CE, иначе я останусь с L2S.