返回交叉连接而不是内连接
本文关键字:连接 交叉连接 返回 | 更新日期: 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在两者中都很常见,但我得到了一个交叉连接。谢谢你。
在employee1
和employee2
中,您还需要OrderId
列,然后通过两个表连接它们,因为您需要在两个表上获得相同的唯一键。
,从你写的,我认为empID
在两个表中都不是唯一的,因为你可以有更多的订单相同的empID
首先你需要一个employee1
和employee2
的唯一键然后你可以在它们上面连接
函数返回的结果在逻辑上是正确的,它不是交叉连接。empID
在一些表中有一些重复的行,所以,数据看起来像一个交叉连接。使用distinct
,它将返回您想要的输出。