2014-02-21 104 views
2

我使用的ASP.NET Web API使用代碼首先,我有這應該保存數據的這種模式稱爲輪廓:如何將Uri的列表<string>轉換爲列表<Uri>?

我願做這樣的事情:

List<Uri> ProfileUris = DBContext.Profiles.Select(p => new Uri(p.Link)).ToList() 

以上拋出一個錯誤

任何想法如何,我可以循環做這種轉換沒有。

+5

什麼錯誤?這段代碼應該可以工作。 – Euphoric

回答

7

實體框架無法將Uri創建轉換爲SQL代碼。從數據庫中選擇鏈接欄,然後將處理客戶端調用AsEnumerable() - 這將允許您調用C#代碼,而不試圖將其轉換爲SQL:

List<Uri> ProfileUris = DBContext.Profiles.Select(p => p.Link) 
           .AsEnumerable() 
           .Select(l => new Uri(l)) 
           .ToList(); 
+0

另一種選擇當然可以是'DBContext.Profiles.AsEnumerable()。Select(p => new Uri(p.Link))。ToList();'但是按照你的方式可以更有效率用Linq-to-Sql選擇,用Linq-to-Objects選擇一個)。 –

+3

@JeppeStigNielsen如果您不會在服務器端投影數據,那麼EF將查詢數據庫中表的所有列,然後將結果集中的每一行映射到'Profile'實體實例。這肯定是沒有效率,然後返回單列沒有任何映射:) –

+0

@Sergey:謝謝謝爾蓋!你的代碼是這樣一個答案,使我有點重構如下:List ProfileUris = DBContext.Profiles.AsEnumerable()。Select(l => new Uri(l))。ToList();它擺脫了額外的'選擇' –

相關問題