更新
根据您的评论,EF 无法跨 2 个不同的上下文解析组合表达式树。
如果表中的记录总数相对较少,或者如果您可以将连接中的记录数减少到少量行(例如每行 Linq join,如下所示。
例如其中yesterday 是DateTime,仅从连接所需的两个数据库中选择一小组数据:
var reducedDataFromTable1 = context1.Table1
.Where(data => data.DateChanged > yesterday)
.ToList();
var reducedDataFromTable2 = context2.Table2
.Where(data => data.DateChanged > yesterday)
.ToList();
var joinedData = reducedDataFromTable1
.Join(reducedDataFromTable2,
t1 => t1.Id, // Join Key on table 1
t2 => t2.T1Id, // Join Key on table 2
(table1, table2) => ... // Projection
);
但是,如果连接所需的两个数据库中的数据大于合理预期在内存中完成的数据,那么您需要研究替代方案,例如:
- 可以在数据库中做跨数据库join吗?如果是这样,请考虑使用 Sql 投影(例如视图)来进行连接,然后您可以在 edmx 中使用它。
- 否则,您将需要通过手动迭代 2 个可枚举项来进行连接,例如 chunking - 这并不简单。按相同顺序对两个表中的数据进行排序会有所帮助。
原答案
我相信你正在寻找 Linq JOIN extension method
您可以加入任意2个IEnumerables,如下:
var joinedData = context1.Table1
.Join(context2.Table2,
t1 => t1.Id, // Join Key on table 1
t2 => t2.T1Id, // Join Key on table 2
(table1, table2) => ... // Projection
);
地点:
- 表 1 上的连接键,例如表 1 的主键或普通自然
键
- 表 2 上的联接键,例如外键或公共自然键
- 投影:你可以从 table1 和 table2 中获得任何你想要的东西,例如
进入一个新的匿名类,例如
new {Name = table1.Name, Data = table2.SalesQuantity}