2013-04-21 62 views
2

我試圖更新entityCollection不能從演員陣容到EntityCollection

這裏是我的LINQ:

itemFromDb.MamConfigurationToBrowser_V1 = 
       (EntityCollection<MamConfigurationToBrowser_V1>) itemFromDb.MamConfigurationToBrowser_V1 
              .Select(browserEfItem => 
                FillFromUi(browserEfItem, 
                   item.MamConfigurationToBrowser_V1 
                   .Single(browserUiItem => browserUiItem.BrowserVersionId == browserEfItem.BrowserVersionId))) 
                   .ToList().AsEnumerable(); 

不過,我得到一個運行鑄造錯誤:

Unable to cast object of type 'System.Collections.Generic.List 1[Conduit.Mam.MaMDBEntityFramework.MamConfigurationToBrowser_V1]' to type 'System.Data.Objects.DataClasses.EntityCollection 1[Conduit.Mam.MaMDBEntityFramework.MamConfigurationToBrowser_V1]'.

爲什麼那?當我在做實體的時候,不是嗎?

+0

我沒有經驗的EntityCollection本身,但我想你需要做「新的EntityCollection (...)」,而不是鑄造,其中......是你的linq表達式 – 2013-04-21 08:18:46

回答

2

您正在創建一個List<MamConfigurationToBrowser_V1>您的Linq表達式中的倒數第二個電話ToList(),然後嘗試將此列表投射到EntityCollection<MamConfigurationToBrowser_V1。我建議創建一個新的EntityCollection並添加從LINQ查詢結果,以這個集合,就像這樣:

var collection = new EntityCollection<MamConfigurationToBrowser_V1>(); 
var processedItems = itemFromDb.MamConfigurationToBrowser_V1 
             .Select(browserEfItem => 
               FillFromUi(browserEfItem, 
                  item.MamConfigurationToBrowser_V1 
                  .Single(browserUiItem => browserUiItem.BrowserVersionId == browserEfItem.BrowserVersionId))) 
                  .ToList(); 
foreach(var item in processedItems) 
{ 
    collection.Add(item); 
} 

重要提示:你的代碼似乎混合與業務邏輯數據庫問題和個人而言,我從來沒有使用過的EntityCollect<T>直接在我的代碼中。我不知道你的上下文,但也許你應該考慮使用Repository和Unit of Work模式。在Google上搜索它們。

0

ItemFromDB是一個獨特的對象?我的意思是,如果itemFromDB不是一個列表,你試圖將一個唯一的對象轉換爲列表。

而不是.ToList()。AsEnumerable()你可以嘗試使用.FirstOrDefault()。