如何使用linq查询从两个不同的edmx连接两个表.. 有没有办法一次从2个不同的edmx进行查询。
感谢。
答案 0 :(得分:5)
<强>更新强>
根据您的评论,EF无法在两个不同的上下文中解析组合的表达式树。
如果表中的记录总数相对较小,或者您可以将联接中的记录数减少到少量行(例如每个<100),那么您可以实现数据(例如.ToList() / .ToArray() / .AsEnumerable()
}来自两个表,并使用Linq join
,如下所示。
e.g。其中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
);
但是,如果两个数据库中连接所需的数据大于可以合理预期在内存中完成的数据,那么您需要调查替代方案,例如:
原始答案
我相信您正在寻找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
);
其中:
new {Name = table1.Name, Data = table2.SalesQuantity}