2014-02-20 67 views
0

我的代码是:为什么我仍然得到System.NotSupportedException

using(var ctxA = new AEntities()) 
using(var ctxB = new BEntities()) 
{ 
    var listOfA = (from A in AEntities.AEntity select A).ToList(); 
    var listOfB = (from B in BEntities.BEntity 
        where listOfA.Select(A = A.Id)contains(B.Id) 
        select B).ToList(); 
} 

,我发现了错误:

The specified LINQ expression contains references to queries that are associated with different contexts. 

然而,因为“ToList”我已经做了一个取在AEntity这使得第二个查询只关于其中一个上下文,没有?

如何分开两个查询仍然使用一个列表来查询其他?

回答

1

尝试只是IDs存入listOfA

var listOfA = (from A in AEntities.AEntity select A.Id).ToList(); 
var listOfB = (from B in BEntities.BEntity 
       where listOfA.Contains(B.Id) 
       select B).ToList(); 
+0

塞尔曼,这工作。谢谢。但我无法弄清楚为什么这个工作,我的第一个尝试不。你可以解释吗?其他问题:我也需要A的实体列表,如何避免在数据库上做两个查询(一个用于整个实体,一个用于ID)? –

0

如果有人想知道,回答我的问题是:

var listOfA = (from A in AEntities.AEntity select A.Id).ToList(); 
List<long> listOfIdsOfA = listOfA.Select(A=>A.id).ToList(); 
var listOfB = (from B in BEntities.BEntity 
      where listOfIdsOfA.Contains(B.Id) 
      select B).ToList(); 

到塞尔曼的答案唯一的区别是标识的列表的创建在第一个查询之后。这就是为什么我也需要整个实体。

相关问题