LINQ表达式,包含对与不同上下文关联的查询的引用

时间:2011-08-11 10:09:56

标签: c# linq entity-framework-4 linq-to-entities

我有这个问题:

var list = (from t1 in context1.SomeTable
            join t2 in context2.SomeTable on t1.ID equals t2.ID
            where //some where clause
            select new { t1.SomeField, t2.SomeField }).ToList());

当此查询尝试执行时,我将收到此错误:

  

指定的LINQ表达式包含对与不同上下文关联的查询的引用。

  1. 为什么LINQ to Entities不允许这样做?
  2. 以另一种方式使用LINQ to Entities仍然可以吗?
  3. 这会是一个什么样的解决方法?

1 个答案:

答案 0 :(得分:6)

我想这是因为你正在构建的语句在后台转换为SQL并在数据库上运行。由于不同的上下文可能来自不同的数据库甚至不同的服务器,因此无法保证在查询服务器时context2中的数据可用于context1。

您可以从每个上下文返回数据并转换为IEnumerable,然后执行标准的linq查询,但是您有明确的数据传输和内存处理开销,否则数据库引擎会执行此操作。 / p>