2017-01-16 56 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

相关问题