返回交叉连接而不是内连接

本文关键字:连接 交叉连接 返回 | 更新日期: 2023-09-27 17:52:42

我有两个从数据库到对象的结果集,当我内部连接它们时,它返回交叉连接。下面是我的代码:

var nw = new NorthwindEntities();
var employee1 = (from emp in nw.Employees
                 join ord in nw.Orders on emp.EmployeeID equals ord.EmployeeID
                 where emp.EmployeeID == 5
                 select new
                 {
                     empID = emp.EmployeeID,
                     empName = emp.FirstName,
                     ordDate = ord.OrderDate
                 }).ToList();
var employee2 = (from emp in nw.Employees
                 join ord in nw.Orders on emp.EmployeeID equals ord.EmployeeID
                 where emp.EmployeeID == 5
                 select new
                 {
                     empID = emp.EmployeeID,
                     empName = emp.FirstName,
                     shpAddress = ord.ShipAddress
                 }).ToList();
var employee = from e1 in employee1
               join e2 in employee2 on new { e1.empID } equals new { e2.empID }
               select new
               {
                   empID = e1.empID,
                   empName = e1.empName,
                   ordDate = e1.ordDate,
                   orAdd = e2.shpAddress
               };
gvAll.DataSource = employee.ToList();

现在,当我将employee1和employee2连接到employee中时,我得到了这些数据集的交叉连接。任何帮助将是非常感激的。

我这背后的主要目标是有数据从数据库返回存储在某个地方暂时,所以我可以工作它与以后从数据库检索的其他数据。

employee1和employee2对员工id(5)使用相同的查询,除了employee1有empID、empName和OrderDate,而employee2有empID、empName和shipAddress。现在我想empID, empName, OrderDate和ShipAddress出雇员的employee1和employee2。empID在两者中都很常见,但我得到了一个交叉连接。谢谢你。

返回交叉连接而不是内连接

employee1employee2中,您还需要OrderId列,然后通过两个表连接它们,因为您需要在两个表上获得相同的唯一键。

,从你写的,我认为empID在两个表中都不是唯一的,因为你可以有更多的订单相同的empID

首先你需要一个employee1employee2的唯一键然后你可以在它们上面连接

函数返回的结果在逻辑上是正确的,它不是交叉连接。empID在一些表中有一些重复的行,所以,数据看起来像一个交叉连接。使用distinct,它将返回您想要的输出。