問題LINQ到實體StringConvert(雙)」不能轉換爲INT轉換爲字符串
需要使用EF4 + SQL CE4爲INT轉換爲字符串。建議使用SqlFunctions.StringConvert(double)的選項仍然會給我帶來錯誤。
選項1(original)。這給了我錯誤:
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(最推薦)。然後儘可能多的帖子表明,我從圖書館System.Data.Objects.SqlClient使用的SqlFunctions.StringConvert()函數:
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 (非常具體的情況)。然後anoter後顯示使用字典一個聰明的解決方案,最終的作品:
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?
我希望微軟在推動我們從已經穩定和更成熟的L2S之前很快就會推出EF。我實際上使用EF4只是因爲想要使用SQL CE,否則我會留在L2S中。
也許是由於我使用SQL CE?而不是SQL或SQL Express?我使用MySQL閱讀其他有相同問題的文章。 EF4應該是數據庫獨立的,不應該嗎? – Nestor 2011-04-24 15:28:05