包含对与不同上下文关联的查询的引用的 LINQ 表达式
Posted
技术标签:
【中文标题】包含对与不同上下文关联的查询的引用的 LINQ 表达式【英文标题】:LINQ expression that contains references to queries that are associated with different contexts 【发布时间】:2011-10-24 20:15:18 【问题描述】:我有这个问题:
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 表达式包含对与不同上下文关联的查询的引用。
-
为什么
LINQ to Entities
不允许这样做?
LINQ to Entities
还可以通过其他方式实现吗?
有什么办法可以解决这个问题?
【问题讨论】:
您能用伪代码解释一下您希望如何执行查询吗?服务器上应该发生什么以及代码中本地应该发生什么? 在我的例子中,我刚刚拆分了我的数据库中的表、SystemContext 中的系统表和 Applicationcontext 中的其余表。所以它仍然在同一个服务器上,同一个连接,只是 2 个不同的实体模型。 所以你把它们放在两个不同的上下文中,但是你假设系统应该意识到上下文是相同的?您是否希望整个查询在服务器端运行?如果是这样,我假设您应该将所有查询相关表包含在同一上下文中。 【参考方案1】:我想这是因为您正在构建的语句在后台转换为 SQL 并在数据库上运行。因为不同的上下文可能来自不同的数据库甚至不同的服务器,所以不能保证在查询服务器时上下文2中的数据对上下文1可用。
您可以从每个上下文返回数据并转换为 IEnumerable,然后执行标准的 linq 查询,但是您有明显的数据传输和内存处理开销,否则数据库引擎会执行这些开销。
【讨论】:
以上是关于包含对与不同上下文关联的查询的引用的 LINQ 表达式的主要内容,如果未能解决你的问题,请参考以下文章
Linq Lambda 错误:指定的 LINQ 表达式包含对与不同上下文关联的查询的引用
错误:“指定的 LINQ 表达式包含对与不同上下文关联的查询的引用”[重复]