Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 查询包含对在不同数据上下文中定义的项的引用_Linq - Fatal编程技术网

Linq 查询包含对在不同数据上下文中定义的项的引用

Linq 查询包含对在不同数据上下文中定义的项的引用,linq,Linq,我有两个来自同一个DBs的var,联合后: var projectedP1 = P1.Select(x => new Project_test { ID_inString = x.ID.ToString(), col1 = x.col1, col2 = x.col2

我有两个来自同一个DBs的var,联合后:

var projectedP1 = P1.Select(x => new Project_test { 
                                     ID_inString = x.ID.ToString(), 
                                     col1 = x.col1, 
                                     col2 = x.col2, 
                                     col3 = x.col3 });
var union = projectedP1.Union(P2);
当P1单独使用或P2单独使用时,一切正常 但当2是union时,我在运行时得到:

查询包含对在不同数据上下文中定义的项的引用

我试过类似的帖子,但不明白。有人知道吗


您永远无法连接来自两个不同上下文的对象;因为union被编译成数据库查询,所以它不知道如何执行它,因为不支持多个DB。最好是分别对每个查询调用ToList(),这将执行数据库查询,并执行LINQ到对象的联合。这完全是一个迭代过程。

很明显,这与P1和P2的创建方式有关,您还没有向我们展示。他们可能来自不同的数据上下文。我还假设你是问这个问题的同一个用户:-为什么你使用不同的用户帐户?是的,同一个人,因为我没有注册。基本上是使用数据库a为P1创建一个dbml(),另一个为P2创建一个dbml(),使用数据库BAh,您从未说过它们来自不同的数据库。你基本上不能在LINQ-to-SQL端这样做-它不会导致联合SQL查询,是吗?在设计时,数据库a和数据库B有两个不同的服务器,但在运行时,它们是相同的。这是LINQ的限制吗?忽略LINQ部分,您建议如何使用来自两个不同数据库的数据运行单个查询?您不需要调用ToList-只需使用AsEnumerable即可:
P1.AsEnumerable().Union(P2)
。感谢您的提示。。。您还必须在P2上执行它,因为它必须根据其上下文执行,不是吗?我猜这是因为它是第二个结果集,不是在第一个操作的上下文中执行的,它会很好地通过,并且不会尝试将联合作为其查询的一部分进行转换…不,您不必在P2上进行转换,因为在P1上进行转换意味着它将在Enumerable中使用实现,已将P1视为
IEnumerable