2013-03-18 57 views
0

我正在從LINQ2SQL轉換到EF,並且在使用一些基本的lambda表達式時遇到了一些麻煩。E.F. NotSupportedException - 從LINQ2SQL轉換

在下面的示例中,我試圖檢索客戶端相關數據的基本列表。當使用LINQ2SQL數據上下文運行時,此語句正常工作。

var data = db.Clients.Select(c => c.Id + ":" + c.Firstname); 
foreach (var item in data) 
{ 

} 

當我執行它針對EF數據方面,我得到:

NotSupportedException - Unable to cast the type 'System.Int32' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types. 

NB:Id字段是一個整數。

我已經能夠通過在db.Clients之後添加ToArray()來解決錯誤。

能有人請解釋如果..

一)我需要這種代碼更改爲每一個預exisitng聲明的在我的解決方案,使之與EF工作;和

b)爲什麼EF在LINQ2SQL好的時候遇到了基本的級聯問題?

感謝。

回答

0

我不能告訴你爲什麼它在Linq2SQL中工作,而不是在實體框架中,但我可以幫助你解決你的問題。

我建議你使用SqlFunctions.StringConvert函數。

var data = db.Clients.Select(c => 
    SqlFunctions.StringConvert((double)c.Id) + ":" + c.Firstname); 

個人而言,如果我做任何字符串操作,我嘗試把只在我的客戶端代碼,像這樣:

var data = db.Clients.Select(c => { c.Id, c.Firstname }); 
foreach (var item in data) 
{ 
    var stringData = String.Format("{0}:{1}", item.Id, item.Firstname); 
    ... 
}