2017-01-16 109 views
0

我有兩個表和一個臨時表。在這兩張表中,如果記錄的名稱是相同的,我會根據事實記錄我加入的記錄。加入是成功的。我從兩張表中取出ID並將其放在臨時表中。所以臨時表有3個列:idfromoldtable,idfromnewtable和name。因此,在此之後,我正在創建另一個表,它只需要存儲idfromthenewdb和名稱,但是在consoleApp執行時會出現以下錯誤,該錯誤位於主題的標題中。LINQ to Entities不識別方法get_Item(Int32)'方法

var queryMapping = from tempRecords in newDb.temporaryTables 
        where tempRecords.tableName == "Settlements" 
        select tempRecords; 

for (int i = 0; i < listHospital.Count; i++) 
{ 
    var mappingItem = queryMapping.First(item => item.idFromOldDb == (int)listHospital[i].SettlementId); //this is the line where the error shows 
    listHospital[i].SettlementId = mappingItem.idFromNewDb; 
} 

任何建議如何處理這個問題?

+0

是否ToListing()queryMapping解決了這個問題? –

+0

@BadDub不,不能解決問題。看看Ehsan Sajjad給出的答案。 :) – Toni

+0

我認爲將queryMapping移入內存(tolisting)會識別int cast,因爲它不再使用int cast調用db –

回答

2

LINQ到實體不知道如何到SQL翻譯INT投代碼,你需要轉換它的LINQ查詢外,然後在查詢中使用的值,快速修復,這將是這樣的:

for (int i = 0; i < listHospital.Count; i++) 
{ 
     int settlmentId = (int)listHospital[i].SettlementId; 
     var mappingItem = queryMapping.First(item => item.idFromOldDb == settlmentId); 
     listHospital[i].SettlementId = mappingItem.idFromNewDb; 
} 
+0

這就是問題所在!非常感謝 !所以,如果我們使用Linq到Entities並且有一個cast。我們需要總是把它轉換到linq查詢之外,然後使用變量? – Toni

+0

你只能寫linq查詢中可以轉換爲相關sql的代碼, –

+0

是不是這個Linq to SQL(因爲操作只在調用First()時執行)?如果它是LINQ的實體應該不會有問題! ||此外,此查詢會在for循環的每次迭代中發送到數據庫 - 這可能會導致問題 – barakcaf

相關問題