【问题标题】:How to join two table from two different edmx using linq query如何使用 linq 查询从两个不同的 edmx 连接两个表
【发布时间】:2013-06-06 06:07:53
【问题描述】:

如何使用 linq 查询从两个不同的 edmx 连接两个表。 有没有办法一次从 2 个不同的 edmx 查询。

谢谢。

【问题讨论】:

  • 向我们展示您的表格内容!
  • 我在 edmx1 中有 100 个表,在 edmx2 有 100 个 .. 只是想通过 linq 查询加入来自 edmx1 的表 1 和来自 edmx2 的表 2
  • 我已经更新了答案 - 我宁愿希望您在加入之前只处理(或过滤)两个表中的一小部分数据。

标签: linq entity-framework edmx


【解决方案1】:

更新

根据您的评论,EF 无法跨 2 个不同的上下文解析组合表达式树。

如果表中的记录总数相对较少,或者如果您可以将连接中的记录数减少到少量行(例如每行 Linq join,如下所示。

例如其中yesterdayDateTime,仅从连接所需的两个数据库中选择一小组数据:

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}

【讨论】:

  • 嗨 Stuart,我收到一条错误消息。“指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 2021-01-12
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多