包含对与不同上下文关联的查询的引用的 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 表达式包含对与不同上下文关联的查询的引用

Linq Lambda 错误:指定的 LINQ 表达式包含对与不同上下文关联的查询的引用

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

错误:“指定的 LINQ 表达式包含对与不同上下文关联的查询的引用”[重复]

指定的 LINQ 表达式包含对与 c# 中的不同上下文错误关联的查询的引用

(Linq/Lambda) 使用 2 个 DBContext 连接 2 个或更多表